我一直在尋找幾個小時來找到一個在JOGL中繪製紋理球體的好方法。我需要的只是朝正確的方向發展,或者某些代碼適用於某人。到目前爲止,我所能找到的是helloTexture(雖然它有效,但顯然不是球體),是否有辦法將其轉換爲球體,或者我應該在其他地方嘗試運氣?在JOGL中渲染紋理球體
回答
我寫這個給你,這是未經測試,因爲我修改了它與GL_TRIANGLES
工作,試圖讓我知道
radius
是球體半徑,rings
是水平切片,sectors
垂直那些
private void createGeometry(float radius, short rings, short sectors) {
float R = 1f/(float)(rings - 1);
float S = 1f/(float)(sectors - 1);
short r, s;
float x, y, z;
points = new float[rings * sectors * 3];
normals = new float[rings * sectors * 3];
texcoords = new float[rings * sectors * 2];
int t = 0, v = 0, n = 0;
for(r = 0; r < rings; r++) {
for(s = 0; s < sectors; s++) {
x = (float) (Math.cos(2 * Math.PI * s * S) * Math.sin(Math.PI * r * R));
y = (float) Math.sin(-Math.PI/2 + Math.PI * r * R);
z = (float) (Math.sin(2 * Math.PI * s * S) * Math.sin(Math.PI * r * R));
texcoords[t++] = s * S;
texcoords[t++] = r * R;
points[v++] = x * radius;
points[v++] = y * radius;
points[v++] = z * radius;
normals[n++] = x;
normals[n++] = y;
normals[n++] = z;
}
}
int counter = 0;
indices = new short[rings * sectors * 6];
for(r = 0; r < rings - 1; r++){
for(s = 0; s < sectors-1; s++) {
indices[counter++] = (short) (r * sectors + s);
indices[counter++] = (short) (r * sectors + (s + 1));
indices[counter++] = (short) ((r + 1) * sectors + (s + 1));
indices[counter++] = (short) ((r + 1) * sectors + (s + 1));
indices[counter++] = (short) (r * sectors + (s + 1));
indices[counter++] = (short) ((r + 1) * sectors + s);
}
}
}
我會如何顯示這樣的東西?在點,法線和textcoords之前放置了一個float []後,我纔開始工作。不過謝謝你。 –
是的,基本上在我的示例中,您可以將'points'和'texcoords'放在'vertexData'裏面。 'indexData'內的'indices'。目前跳過「法線」,除非您執行照明,否則不需要這些。相應地修改頂點屬性參數,因爲現在你的位置是3而不是2;) – elect
我還沒有理解。對不起,我吮吸這個...我如何把點和texcoors?我試着把它們放在這裏:'private float [] vertexData = new float [] {texcoords,points }; private short [] indexData = new short [] { indicantly };',但這只是給了我一個藍屏。對不起,如果我錯過了一些非常明顯的東西... –
- 1. 使用JOGL渲染很多紋理vbo使用JOGL
- 2. 渲染紋理
- 3. 在pyopengl中渲染紋理
- 4. 當渲染紋理時,球體顯示多邊形
- 5. 用於渲染3d球體的紋理座標
- 6. FBO:在繪製渲染紋理時渲染紋理,錯誤的紋理映射
- 7. JOGL 2.0,渲染紋理的深度緩衝區
- 8. OpenGL渲染紋理
- 9. Berkelium渲染紋理
- 10. Three.js渲染紋理
- 11. JOGL顛倒渲染
- 12. '渲染到紋理'和多遍渲染
- 13. JOGL - 多紋理
- 14. Android紋理球體
- 15. 紋理球體C#
- 16. 在SVG/Canvas中渲染球體
- 17. OpenGL ES 2球體渲染
- 18. three.js不會渲染球體
- 19. LWJGL中的紋理球體
- 20. 在OpenGL ES中渲染紋理
- 21. 在directx中渲染多個紋理11
- 22. 在Three.js中穿孔渲染到紋理
- 23. 在Delphi中使用OpenGL渲染紋理
- 24. 使用C#在Direct X中將紋理渲染到紋理中
- 25. OpenGL - 渲染成紋理
- 26. Opengl GLSL渲染紋理
- 27. 渲染紋理問題
- 28. WebGL紋理渲染部分
- 29. 的DirectX紋理渲染incorretly
- 30. LWJGL紋理不渲染
你可以建立。只需添加更多的頂點以形成一個球體並在這些頂點之間繪製三角形。如果你不知道如何建議你先找一個關於繪製三角形的教程,並試着理解它是如何工作的。從這裏走向球體或任何其他形狀只是繪製更多三角形的問題。 – Thomas
看看這個答案。應該是同樣的原則。只是編碼在C + +:http://stackoverflow.com/questions/7687148/drawing-sphere-in-opengl-without-using-glusphere – flakes
更好不@flkes,使用不贊成的'GL_QUADS' – elect