使用 OpenGL 从图像创建 3D 地形
Creating a 3D-terrain from an image using OpenGL
是否可以使用像素值作为 Z 坐标在 3D 中渲染灰度图像?
我应该从哪里开始?在 OpenGL 中绘制点的命令是什么?确保该点可见的基本设置是什么?
我正在使用 Qt,并且能够编译和 运行 Qt 的 OpenGL 示例。
好的,我已经找到了如何做并使用 Qt 实现了一个小演示:
https://github.com/vheinitz/Cell3DViewerDemo
要理解的主要内容似乎是如何创建顶点列表:
glNewList(_vertexes, GL_COMPILE);
GLenum mode = GL_TRIANGLES;//GL_TRIANGLES GL_POINTS GL_LINES GL_POINTS GL_TRIANGLE_STRIP GL_QUADS
glBegin(mode);
for (int y = 0; y < height - 2; y++) {
int x = 0;
float gy = y*sy -yo;
float gy1 = (y+1)*sy-yo;
for (x; x < width-2; x++) {
float z = qGray(qimg.pixel(x, y));
float gx = x*sx -xo;
float gx1 = (x+1)*sx -xo;
float gz = qGray(qimg.pixel(x, y))*sz -zo;
glColor3f(0, gz, 0);
glVertex3f(gx, gz, gy);
gz = qGray(qimg.pixel(x, y+1))*sz -zo;
glColor3f(0, gz, 0);
glVertex3f(gx, gz, gy1);
gz = qGray(qimg.pixel(x+1, y))*sz -zo;
glColor3f(0, gz, 0);
glVertex3f(gx1, gz, gy);
glVertex3f(gx1, gz, gy);
gz = qGray(qimg.pixel(x, y+1))*sz -zo;
glColor3f(0, gz, 0);
glVertex3f(gx, gz, gy1);
gz = qGray(qimg.pixel(x+1, y+1))*sz -zo;
glColor3f(0, gz, 0);
glVertex3f(gx1, gz, gy1);
}
}
glEnd();
glEndList();
是否可以使用像素值作为 Z 坐标在 3D 中渲染灰度图像? 我应该从哪里开始?在 OpenGL 中绘制点的命令是什么?确保该点可见的基本设置是什么?
我正在使用 Qt,并且能够编译和 运行 Qt 的 OpenGL 示例。
好的,我已经找到了如何做并使用 Qt 实现了一个小演示:
https://github.com/vheinitz/Cell3DViewerDemo
要理解的主要内容似乎是如何创建顶点列表:
glNewList(_vertexes, GL_COMPILE);
GLenum mode = GL_TRIANGLES;//GL_TRIANGLES GL_POINTS GL_LINES GL_POINTS GL_TRIANGLE_STRIP GL_QUADS
glBegin(mode);
for (int y = 0; y < height - 2; y++) {
int x = 0;
float gy = y*sy -yo;
float gy1 = (y+1)*sy-yo;
for (x; x < width-2; x++) {
float z = qGray(qimg.pixel(x, y));
float gx = x*sx -xo;
float gx1 = (x+1)*sx -xo;
float gz = qGray(qimg.pixel(x, y))*sz -zo;
glColor3f(0, gz, 0);
glVertex3f(gx, gz, gy);
gz = qGray(qimg.pixel(x, y+1))*sz -zo;
glColor3f(0, gz, 0);
glVertex3f(gx, gz, gy1);
gz = qGray(qimg.pixel(x+1, y))*sz -zo;
glColor3f(0, gz, 0);
glVertex3f(gx1, gz, gy);
glVertex3f(gx1, gz, gy);
gz = qGray(qimg.pixel(x, y+1))*sz -zo;
glColor3f(0, gz, 0);
glVertex3f(gx, gz, gy1);
gz = qGray(qimg.pixel(x+1, y+1))*sz -zo;
glColor3f(0, gz, 0);
glVertex3f(gx1, gz, gy1);
}
}
glEnd();
glEndList();