三维照明(OpenGl)

三维照明(OpenGl),opengl,lighting,Opengl,Lighting,我已经问了这个问题,但我没有得到答案。顺便说一句,我发现了一些新的东西。我想从solid works导出的wrl文件中显示一个3D模型。该文件包含三角形的顶点,我正在使用glBegin(GL_三角形)绘制它们,但它看起来不太好看,看起来也不太3D!我试着在那个场景中用同样的灯光设置画一个球体,看起来非常漂亮而且是3D的 Glu有什么事吗? 我应该用Glu画三角形吗 要获得良好的着色效果,您还应该为三角形提供法线。您至少可以发布一个(链接到)场景的屏幕快照。如果没有更多的信息,几乎不可能说出问题所

我已经问了这个问题,但我没有得到答案。顺便说一句,我发现了一些新的东西。我想从solid works导出的wrl文件中显示一个3D模型。该文件包含三角形的顶点,我正在使用glBegin(GL_三角形)绘制它们,但它看起来不太好看,看起来也不太3D!我试着在那个场景中用同样的灯光设置画一个球体,看起来非常漂亮而且是3D的
Glu有什么事吗?

我应该用Glu画三角形吗

要获得良好的着色效果,您还应该为三角形提供法线。

您至少可以发布一个(链接到)场景的屏幕快照。如果没有更多的信息,几乎不可能说出问题所在——如果有的话。你读过红皮书吗?@Ishtar:不完全,但我在上面。。。。谢谢,你能帮我举个例子吗?我该怎么做?@mrbm:如果您的文件格式为您提供法线,请使用glNormal3f传递它们,否则您必须自己计算法线。对于这一点,你取跨越每个三角形的向量的叉积(这是面法线),然后为每个顶点添加顶点所用的面的法线,并对得到的向量进行规格化。是的,这很有效,我很高兴,非常感谢!法线的长度似乎决定了光的数量,对吗?@mrbm:是的,这是因为向量的长度缩放了用于确定照明的标量积。这就是为什么必须规格化法线(即缩放长度为1的法线向量)。这是通过v_长度(v)=sqrt(v.x²+v.y²+v.z²+…)=sqrt(v·v)实现的;v_归一化(v)=v/v_长度(v);“·”表示标量积(也称为点积)