java - Open GL 转换

标签 java opengl graphics transformation

我有一个小型开放 GL 应用程序,正在使用 JOGL 用 Ja​​va 编写。

我正在用头撞墙,试图找到应用转换的当前方法

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

编辑:(删除之前的代码)

代表我史诗般的失败。当他说他的着色器代码时,我认为他指的是加载和编译着色器的 .java 文件。我突然意识到他指的是着色器代码,它位于 glsl 文件中。我现在看到他有 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 等..调用。

关于java - Open GL 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9219424/

相关文章:

java - 如何在java中找到两个arraylist之间的差异

java - 如何在不使用本地安装的工件的情况下构建

opengl - GLSL double 角、三角函数和指数函数解决方法

c# - WPF:无法在没有可怕视觉效果的情况下调整窗口大小

graphics - 标准化设备坐标

java - 在 Controller 类中全局声明 HttpSession?

java - 舍入错误给了我无效的答案

c++ - 如何使用 visual studio 2015 创建一个我可以从我的桌面运行的 .exe

c++ - 如何使用 OpenGL、SDL 和 C++ 绘制文本?

c++ - Allegro 5 在基元上绘制位图