c# - 为什么基于 3D 纹理的体积渲染没有 3D 效果
问题描述
我使用OpenTK实现了基于 3D 纹理的体积渲染。代码基于这个项目。但结果显示没有 3D 效果,只有平面 2D 图像。
管道很简单:(1)加载3D纹理;(2) 绘制一系列四边形(矩形)并指定对应的纹理坐标。
每个四边形的顶点是使用生成的
private void generateVertices(int n)
{
vertices = new float[n * 3 * 4];
int cur;
for (int i = 0; i < n; i++)
{
cur = 3 * 4 * i;
vertices[cur] = -.5f;
vertices[cur + 1] = -.5f;
vertices[cur + 2] = -0.5f + i / n;
vertices[cur+3] = -.5f;
vertices[cur + 4] = .5f;
vertices[cur + 5] = -0.5f + i / n;
vertices[cur+6] = .5f;
vertices[cur + 7] = .5f;
vertices[cur + 8] = -0.5f + i / n;
vertices[cur+9] = .5f;
vertices[cur + 10] = -.5f;
vertices[cur + 11] = -0.5f + i / n;
}
}
要绘制 256 个四边形,只需调用 generateVertices(256) 和 opengl 例程
GLDrawElements(GL_QUADS,...)
使用顶点着色器中的顶点位置计算 TexCoordinates,如下所示:
texCoord = aPosition+vec3(0.5f,0.5f,0.5f);
欢迎任何想法。
解决方案
[0,n-1] 范围内的整数i,i/n将永远为 0。所以你确实指定了 n 个重叠的四边形。
解决方案很简单,只需将 i 显式转换为 float 即可(float)i/n
。
推荐阅读
- java - Android 和 Google Firebase 之间的连接:FCM 未向应用发送通知
- google-apps-script - 是否可以更改 Google 工作表侧边栏标题背景颜色?
- javascript - 当浏览器的后退按钮在Vue.js中传递时如何触发警报
- python-3.x - 如何使 pytesseract 正确读取 slahed 0
- python - 多次加载 Keras 模型时 GPU 内存泄漏
- javascript - Chrome 扩展打破了网页的原始布局
- javascript - Laravel & CORS - 创建一个可分发的 JS 小部件 - 通过 XMLHttpRequest 获取数据,被 CORS 阻止
- c# - 在抽象类构造函数中使用泛型类型
- electron - 使用 arg 超出 ipcRenderer 电子?
- windows - 批处理窗口:为所有目录和子目录中的所有 csv 添加引号