c++ - 在屏幕上渲染 3D 点的最简单方法(C++ Windows Visual Studio)

标签 c++ visual-studio-2010 rendering

第一次发帖,请多多关照。

背景:我有很强的 C++ 背景。我熟悉所有 C++ 原生的东西以及标准模板库 (STL)。我过去做过一些图形的东西,但它几乎总是乱七八糟的,并且被黑客攻击在一起,必须包含 DLL 文件等......

这是我需要做的,我希望它尽可能简单。

给定一个 3D 点数组,我想将它们渲染到屏幕上。我还希望能够旋转视口(viewport)。我只想能够看到构成模型的 3D 点,并且能够从不同角度查看它们。我将自己填充点数组(例如从文本文件加载它们)。

可悲的是,我知道实现这一切的所有数学知识。我以前从头开始做过,但是,每隔几年就会发生一些糟糕的事情,比如 DirectX 更新,或者我必须使用最新版本的 Visual Studio,然后我的旧代码就不再能正常工作了。

我只需要使用 C++ 以最快的方式将 3D 点渲染到屏幕上。非常感谢。显然,我必须使用一些 API 或其他东西才能使其像 DirectX 或 OpenGL 一样工作。我希望也许有一些我以前从未使用过的系统可以让我调用一个函数,例如“DrawPoint(x,y,z)”,然后我就可以收工了。

所以,我的问题是,如果在我的 C++ 代码中有大量 3D 点和相机的 (x,y,z) 位置以及相机所面对的 vector ,那么最简单的渲染方法是什么这(使用 Windows7 或 Windows8 和 C++ 和 Visual Studio 2010)。

最佳答案

您需要代码来设置相机和模型矩阵,以及投影矩阵。 OpenGL 的固定功能管道可以帮助解决这个问题。

相机基本上是 View 矩阵,结合 3D 点将构成模型 View 矩阵。

如果您要使用 OpenGL,您可以使用 GLU 库中的“gluLookAt(...)”之类的东西用于相机。为了在代码的渲染部分添加 3D 点,您可以只在绘制点的地方使用固定功能管道(虽然现代 OpenGL 已经转向使用着色器,但它应该足够了),所以像这样:

void draw(){
    glColor3f(r,g,b);      // the r,g,b colour of the points
    glPointSize(size);     // where size indicates the size of the point
    glBegin(GL_POINTS);
    glVertex3f(x1, y1, z1);    // where x,y,z denotes the point position in 3D space
    glVertex3f(x2, y2, z2);
    .
    .
    glVertex3f(xn, yn, zn);
    glEnd();
}

这里有很多关于创建 3D 渲染应用程序的 Material ,从你的帖子中我不清楚你可能已经实现了多少代码。

为了使它更容易,有一个很好的资源可用 here我关注它已经有一段时间了,它有一套很棒的 OpenGL 注释。

如果您查看 Matrix4 类笔记,并从那里下载“matrix.zip”教程源代码,它几乎就是您想要的。只需将“main.cpp”文件中 drawModel() 函数中的代码替换为上面的代码,即可从文件加载 3D 点。此外,确保 VS 项目属性中包含 GLUT 库文件夹。

我还建议您仔细阅读这些教程和注释,它们非常简洁、结构合理并且涵盖了 OpenGL 的大部分基础知识。

关于c++ - 在屏幕上渲染 3D 点的最简单方法(C++ Windows Visual Studio),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29750264/

相关文章:

c# - 如何在 Visual Studio 2010 中创建 'surround with' 类型的片段?

mysql - 循环在 Sub 中不断重复

c++ - 生成文件:6:目标 'all' 的配方在 ubuntu-16.04 上失败

c++ - MingW32 编译节

VB.NET在继续读取/写入之前检查文件是否打开?

graphics - Vulkan - 直接绘制纹理,无需顶点和着色器

svg - 两个完全相同的 SVG 路径绘制方式不完全相同

c# - 在WPF C#中的wrappanel内部重新排列CustomControl

c++ - 如果是一个类的私有(private)数据成员并且我们创建该类的两个对象,那么指向 int 数据类型的指针是什么?

c++ - 在派生类中使用复制分配