- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 LWJGL 中渲染带有顶点缓冲区对象的四边形。
[5, 5, 6]
[6, 5, 6]
[6, 6, 6]
[5, 6, 6]
有点效果:
但它只渲染了一个三角形(立方体是使用立即模式渲染的),我不确定它是否是顶点或 tex 坐标(或其他完全不同的东西)有问题。
block .java: (x=5, y=5, z=5)
private final Texture top;
public void render() {
top.render(x, y, z + 1, x, y + 1, z + 1, x + 1, y + 1, z + 1, x + 1, y, z + 1);
}
纹理.java:
public final TextureResource textureResource;
public final int width, height;
private final int texID;
private FloatBuffer vBuffer;
private FloatBuffer tBuffer;
private boolean changed = true;
private IntBuffer ib = BufferUtils.createIntBuffer(2);
private final int vHandle;
private final int tHandle;
public void render(float x1, float y1, float z1, float x2, float y2, float z2, float x3, float y3, float z3, float x4, float y4, float z4) {
updateBuffers3D(x1, y1, z1, x2, y2, z2, x3, y3, z3, x4, y4, z4);
textureResource.render(texID, vBuffer, tBuffer, changed, vHandle, tHandle, Color.WHITE, 3);
}
private void updateBuffers3D(float x1, float y1, float z1, float x2, float y2, float z2, float x3, float y3, float z3, float x4, float y4, float z4) {
FloatBuffer tempVertexBuffer = BufferUtils.createFloatBuffer(12);
FloatBuffer tempTextureCoordsBuffer = BufferUtils.createFloatBuffer(8);
tempVertexBuffer.clear();
tempTextureCoordsBuffer.clear();
System.out.println(x1 + ", " + y1 + ", " + z1 + " | " + x2 + ", " + y2 + ", " + z2 + " | " + x3 + ", " + y3 + ", " + z3 + " | " + x4 + ", " + y4 + ", " + z4);
tempVertexBuffer.put(x1).put(y1).put(z1);
tempVertexBuffer.put(x2).put(y2).put(z2);
tempVertexBuffer.put(x3).put(y3).put(z3);
tempVertexBuffer.put(x4).put(y4).put(z4);
/*tempVertexBuffer.put(x1).put(x2).put(x3).put(x4);
tempVertexBuffer.put(y1).put(y2).put(y3).put(y4);
tempVertexBuffer.put(z1).put(z2).put(z3).put(z4);*/
tempTextureCoordsBuffer.put(0).put(0);
tempTextureCoordsBuffer.put(0).put(1);
tempTextureCoordsBuffer.put(1).put(1);
tempTextureCoordsBuffer.put(1).put(0);
for (int i = 0; i < 12; i++) {
if (vBuffer.get(i) != tempVertexBuffer.get(i)) {
vBuffer.clear();
tempVertexBuffer.flip();
vBuffer.put(tempVertexBuffer);
vBuffer.flip();
changed = true;
break;
} else {
changed = false;
}
}
for (int i = 0; i < 8; i++) {
if (tBuffer.get(i) != tempTextureCoordsBuffer.get(i) || changed) {
tBuffer.clear();
tempTextureCoordsBuffer.flip();
tBuffer.put(tempTextureCoordsBuffer);
tBuffer.flip();
changed = true;
break;
} else {
changed = false;
}
}
}
TextureResource.java:
private void use(int texID, ReadableColor color) {
glEnable(GL_TEXTURE_2D);
glColor4f((float) color.getRed() / 255f, (float) color.getGreen() / 255f, (float) color.getBlue() / 255f, (float) color.getAlpha() / 255f);
glBindTexture(GL_TEXTURE_2D, texID);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
}
private void endUse() {
glDisable(GL_BLEND);
glDisable(GL_TEXTURE_2D);
}
public void render(int texID, FloatBuffer vBuffer, FloatBuffer tBuffer, boolean changed, int vHandle, int tHandle, ReadableColor color, int size) {
if (!loaded) {
return;
}
use(texID, color);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, vHandle);
if (changed) {
glBufferDataARB(GL_ARRAY_BUFFER_ARB, vBuffer, GL_STATIC_DRAW_ARB);
}
glVertexPointer(size, GL_FLOAT, 8, 0L);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, tHandle);
if (changed) {
glBufferDataARB(GL_ARRAY_BUFFER_ARB, tBuffer, GL_STATIC_DRAW_ARB);
}
glTexCoordPointer(2, GL_FLOAT, 8, 0L);
glDrawArrays(GL_QUADS, 0, 4);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
endUse();
}
有什么想法吗?我做错了什么?
最佳答案
经过仔细检查,我认为您对 glVertexPointer (...)
和 glTexCoordPointer (...)
的调用中的跨步参数是罪魁祸首。它应该是 0 而不是 8,因为这是两个紧密打包的缓冲区,而不是交错顶点和纹理坐标的缓冲区。即使您使用交错缓冲区,步幅也将为 8 + 12 = 20。
glVertexPointer(size, GL_FLOAT, 0, 0L);
[...]
glTexCoordPointer(size, GL_FLOAT, 0, 0L);
当您使用 8 的步幅时,您会在仅绘制第二个顶点后超出顶点数组。
关于java - 无法使用 VBO 渲染四边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20692667/
在我的 OpenGL 程序中,我按顺序执行以下操作: // Drawing filled polyhedrons // Drawing points using GL_POINTS // Displa
我想传递一个包含原始页面的局部变量,这个变量只包含一个带有值的符号。 当我使用此代码时,它运行良好,可以在部分中访问 origin 变量: render :partial => "products",
为什么这个 HTML/脚本(来自“JavaScript Ninja 的 secret ”)不渲染? http://jsfiddle.net/BCL54/
我想在阅读完 View 后返回到特定的网页位置(跳转到页内 anchor )。换句话说,在 views.py 中,我想做类似的事情: context={'form':my_form} return r
我有一个包含单条折线的 PathGeometry,并以固定的间隔向该线添加一个新点(以绘制波形)。使用 Perforator 工具时,我可以看到每次向直线添加一个点时,WPF 都会将整个 PathGe
尝试了解如何消除或最小化网站上不同 JavaScript 库的渲染延迟。 例如,如果我想加载来自许多社交网络的“即时”关注按钮,它们似乎会相互阻止渲染,并且您会收到令人不快的弹出窗口。 (func
我有以 xyz 点格式表示 3D 表面(即地震断层平面)的数据。我想创建这些表面的 3D 表示。我使用 rgl 和 akima 取得了一些成功,但是它无法真正处理可能会自行折叠或在同一 x,y 点具有
我正在用 Libgdx 编写一个小游戏。 我有一个 Render[OpenGL] 线程,它不断对所有对象调用 render() 和一个更新线程不断对所有对象调用 update(double delta
我有一个 .Rmd 文件包含: ```{r, echo=FALSE, message=FALSE, results='asis'} library(xtable) print(xtable(group
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improve
请不要评判我,我只是在学习 Swift。 最近我安装了 MetalPetal 框架,并按照说明操作: https://github.com/MetalPetal/MetalPetal#example-
如果您尝试渲染 Canvas 宽度和高度之外的图像,计算机是否仍会尝试渲染它并使用资源来尝试渲染它?我只是想找出在尝试渲染图像之前检查图像是否在 Canvas 内是否更好。 最佳答案 我相信它仍然在无
我在 safari 中渲染时遇到问题。 在 firefox、chrome 和 IE 上。如下图所示: input.searchbox{-webkit-border-radius:10px;-moz-b
我正在尝试通过远程桌面在 Windows7 下运行我在 RHEL7 服务器中制作的 java 程序。 服务器中的所有java程序都无法通过远程桌面呈现。如果我在服务器位置访问服务器本身,它们看起来没问
我正处于一个新项目的设计阶段,该项目将采用数据集并将其加载到文档中,然后围绕模板呈现文档。呈现的文件可以是 CSV 数据集、PDF 营销信函、电子邮件……很多东西。数据不会是数学方程式,我只是在寻找一
有没有办法在不同的 div 下渲染 React 组件的子组件? ... ... ... ... ...
使用以下代码: import numpy as np from plotly.offline import iplot, init_notebook_mode import plotly.graph_
截至最近, meteor 的所有文档都指出 onRendered是一种在模板完成渲染时获取回调的新方法。和 rendered只是为了向后兼容。 但是,这似乎对我不起作用。 onRendered永远不会
所以在我的基本模板中,我有:{% render "EcsCrmBundle:Module:checkClock" %} 然后我创建了 ModuleController.php ... getDoctr
我正在使用 vue-mathjax 来编译我的 vue 项目中的数学方程。它正在编译第一个括号 () 之间的文本。我想防止编译括号内的字符串。在文档中我发现,对于$符号,如果我们想逃避编译,我们需要使
我是一名优秀的程序员,十分优秀!