新人求解,关于插件开发


#1

我现在有一个mesh,贴了图,需要把mesh上指定坐标点的贴图颜色和法向量取到,请问有什么办法或思路


#2

获取顶点颜色:
https://developer.rhino3d.com/api/RhinoScriptSyntax/#mesh-MeshVertexColors
获取顶点法线:
https://developer.rhino3d.com/api/RhinoScriptSyntax/#mesh-MeshVertexNormals


#3

我通过TextureEvaluator类的getcolor方法取到了我想要的颜色,但是我不知道这个方法所用的参数怎么获取,以及参数uvw点与空间坐标转化


#4

c#


#5

TextureEvaluator.GetColor() 有三个参数,第一个参数是要获取颜色的 UV 坐标值,只不过这个坐标值是以定义 Point3d 点的方式给的,new 一个 Point3d 点对象,把 U V W 坐标给他即可。
后面两个参数是光线微分,贴图在不同光照角度下会呈现出不同的颜色,通过后面这两个参数来设置光线微分,光线微分的具体含义与定义方法请参照《Physically Based Rendering》(作者:Pharr Humphreys)的第11章。这两个参数通过定义向量的方式来定义。


#6

非常感谢
还有一个问题,就是怎么把uv坐标转为空间坐标,我一直没找到办法


#7

NurbsSurface 和 Surface 类都有一个 PointAt(u,v) 方法,可以把 UV 坐标转换为空间坐标。


#8

但是我要获得的是mesh上的渲染颜色


#9

应该说是纹理颜色


#10

你不是说已经获取了你想要的颜色吗?


#11

我是需要提取mesh点的空间坐标和渲染颜色,渲染颜色是通过TextureEvaluator.GetColor()输入UV坐标获取的,就需要把UV坐标和空间坐标对应起来,我可以通过mesh所对应的surface来把uv坐标转换为surface上的点坐标(相当于有误差的mesh上点坐标),但是这样取到的点不都在曲面上,我就需要通过点在曲面是来判断,
这样的话就还存在一个问题,就是有【点mesh是通过已有的mesh进行旋转等变换得到的,这样就无法通过点在曲面判断出来】。


#12

我想到了,我可以把曲面做相同的变换
谢谢


#13

又有一个新问题,我用UV坐标来取点,怎么保证点之间的间隔是一像素,或者说一像素的间距在uv中是多少


#14

这个无法保证,因为像素和 UV 之间不存在任何关系。建议先学习 Rhino 的基础知识,搞清楚 Rhino 的体系结构,再做插件开发。