我有一个小的开放式GL应用程序,我正在使用JOGL用Java编写。

我b着脑袋试图找到当前应用变换的方式

本质上,我要完成的工作是使两个对象彼此相邻。基本上,我创建对象(计算所有三角形的方法-我知道这是可行的,因为两个对象都显示出来,它们只是彼此重叠),然后在显示中将它们放在VBO中并调用drawElements。我的问题是我看不到任何不使用glTranslatef,glRotatef和glScalef的在线示例或教程,据我所知,它们已经过时,并且曾经是旧的开放式GL的固定功能方面的一部分。

编辑:(先前的代码已删除)

史诗代我失败。当他说自己的着色器代码时,我认为他的意思是加载和编译着色器的.java文件。令我惊讶的是,他的意思是在glsl文件中的SHADER CODE。我现在看到他有3个mat4变量,分别容纳rx,ry和rz。奇怪的是,即使我设置了比例尺并平移了矩阵,我的形状也不再出现。旋转矩阵的设置与假设相同,最后一行是“ glPosition = rz * ry * rx * vPosition;”。我也尝试声明转换矩阵和缩放矩阵,然后执行“ = s * t * rz * ry * rx * vPosition”,但没有骰子。

这是当前的着色器代码:

attribute vec4 vPosition;
uniform vec3 theta;
uniform vec3 trans;
uniform vec3 scale;

void main()
{
// Compute the sines and cosines of each rotation
// about each axis
vec3 angles = radians (theta);
vec3 c = cos (angles);
vec3 s = sin (angles);

// rotation matricies
mat4 rx = mat4 (1.0,  0.0,  0.0,  0.0,
                0.0,  c.x,  s.x,  0.0,
                0.0, -s.x,  c.x,  0.0,
                0.0,  0.0,  0.0,  1.0);

mat4 ry = mat4 (c.y,  0.0, -s.y,  0.0,
                0.0,  1.0,  0.0,  0.0,
                s.y,  0.0,  c.y,  0.0,
                0.0,  0.0,  0.0,  1.0);

mat4 rz = mat4 (c.z, -s.z,  0.0,  0.0,
                s.z,  c.z,  0.0,  0.0,
                0.0,  0.0,  1.0,  0.0,
                0.0,  0.0,  0.0,  1.0);

//mat4 t = mat4 (1.0, 0.0, 0.0, trans.x,
//               0.0, 1.0, 0.0, trans.y,
//               0.0, 0.0, 1.0, trans.z,
//               0.0, 0.0, 0.0, 1.0);

//mat4 s = mat4 (scale.x, 0.0, 0.0, 0.0,
//               0.0, scale.y, 0.0, 0.0,
//               0.0, 0.0, scale.z, 0.0,
//               0.0, 0.0, 0.0, 1.0);

gl_Position = rz * ry * rx * vPosition;
//gl_Position = s * t * rz * ry * rx * vPosition;
}


因此,从本质上讲,如果我取消对底部两个矩阵的注释,但使glPosition语句保持不变,则什么也不会出现。同样,注释掉的glPosition语句也不起作用(尽管我并不感到惊讶,但我在矩阵乘法方面的表现并不出色)。我还尝试仅执行s * vPosition仅尝试进行扩展,但再次看不到任何内容。

最佳答案

听起来您的教授希望您通过glLoadMatrix和glTranslate等调用您自己的矩阵。

10-08 09:08