【问题标题】:drawing surface normals in opengl在opengl中绘制表面法线
【发布时间】:2014-06-24 00:52:18
【问题描述】:

我在opengl中画了一个倾斜屋顶的房子。 我在定义倾斜屋顶的法线时遇到问题。它不会与轴平行,所以这是我使用的:

glBindTexture(GL_TEXTURE_2D,texture[3]);
glBegin(GL_QUADS);
glColor3f(1,1,0);
glNormal3f(0,cos(th),sin(th));

glTexCoord2f(0,0);
glVertex3f(2,1.25,1);
glTexCoord2f(1,0);
glVertex3f(2,2.2,0);
glTexCoord2f(1,1);
glVertex3f(-2,2.2,0);
glTexCoord2f(0,1);
glVertex3f(-2,1.25,1);
glEnd();
glBindTexture(GL_TEXTURE_2D,texture[3]);
glBegin(GL_QUADS);

glColor3f(1,1,0);
glNormal3f(0,cos(-th),sin(-th));
//glBegin(GL_QUADS);
glTexCoord2f(0,0);
glVertex3f(-2,1.25,-1);
glTexCoord2f(1,0);
glVertex3f(-2,2.2,0);
glTexCoord2f(1,1);
glVertex3f(2,2.2,0);
glTexCoord2f(0,1);
glVertex3f(2,1.25,-1);
glEnd();

我的程序允许用户选择他想从哪个角度看到对象th是那个角度..

好像灯光不太对。

谁能帮帮我?

【问题讨论】:

    标签: opengl lighting normals


    【解决方案1】:

    我的程序允许用户选择他想从哪个角度看到对象th是那个角度..

    那么这是用于法线的错误值。您应该从顶点计算法线。四边形由两个三角形组成。一个三角形有 3 条边。取三角形两条边的叉积可以得到三角形的法线。

    【讨论】:

    • 你能用我拥有的顶点给我看一个例子吗?我对图形很陌生,但仍在努力掌握它。
    • @user3600372:我当然可以用你那里的数字准确地写下来,但是你不会从中学到任何东西。首先,您必须熟悉线性代数的基础知识;如果你不这样做,你将很难进行任何类型的图形编程。对于维数为 3 的向量,一种可能的特定操作是所谓的“叉积”,它产生垂直于两个给定向量的向量。如果您的向量是 (x,y,z) 和 (X,Y,Z),则叉积是 (yZ-zY, zX-xZ, xY-yX)。将顶点位置之间的向量放入叉积中。
    • 我已经计算了 2 组点的法线。它们是 (0,4,3.8) 和 (0,4,-3.8)。请问它们是否正确?
    • @user3600372:绝对不是。用于 OpenGL 照明的法线必须是单位长度,这意味着它们的任何元素都不能大于 1。
    • 哦,好吧...所以我没有标准化...标准化的向量将是 (0,0.73,0.69) 和 (0,0.73,-0.69)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多