如何用OpenGLES繪製圓柱體?如何用OpenGLES繪製圓柱體?
3
A
回答
1
你需要通過對象加載來完成。您無法使用Open GL ES調用3D形狀圖元。
期待通過傑夫·拉馬什的博客,有很多真正好的資源如何有目標負載。 link text
1
3
第一步是寫一個繪製三角形的子程序。我會留給你的。然後畫出一系列構成圓柱體形狀的三角形。訣竅是用一個多邊形來近似一個具有64個邊的多邊形的圓。下面是一些關於我的頭頂的僞代碼。
for (i = 0; i < 64; i++)
{
angle = 360 * i/63; // Or perhaps 2 * PI * i/63
cx[i] = sin(angle);
cy[i] = cos(angle);
}
for (i = 0; i < 63; i++)
{
v0 = Vertex(cx[i], cy[i], 0);
v1 = Vertex(cx[i + 1], cy[i + 1], 0);
v2 = Vertex(cx[i], cy[i], 1);
v3 = Vertex(cx[i + 1], cy[i + 1], 1);
DrawTriangle(v0, v1, v2);
DrawTriangle(v1, v3, v2);
// If you have it: DrawQuad(v0, v1, v3, v2);
}
代碼中幾乎肯定存在一個錯誤。最有可能的是,我已經搞亂了三角形繪製中的纏繞順序,所以最終可能只有一半的三角形明顯可見,或者只有後面可見的三角形很奇怪。
性能很快就會要你畫三角形帶和球迷的效率,但這應該讓你開始。
0
可以通過計算幾何程序上畫筒。最重要的是,您應該使其支持triangle stripping,並且您還需要計算映射座標以及可能的法線。所以從頭開始需要一些思考。
我已經創建了C#進行Unity3D模塊所做的正是這一點,讓你來調整參數。由於幾何計算在任何地方都是一樣的,因此應該可以輕鬆地轉換爲C或C++。觀看video瞭解詳情,並從GitHub下載代碼。
1
我希望這可以幫助你,這是我實現的圓柱體在OpenGLES 2.0的Android
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import javax.microedition.khronos.opengles.GL10;
public class Cylinder {
public Cylinder(int n) {
this.numOfVertex = n;
float[] vertex = new float[3 * (n + 1) * 2];
byte[] baseIndex = new byte[n];
byte[] topIndex = new byte[n];
byte[] edgeIndex = new byte[n*2 + 2];
double perAngle = 2 * Math.PI/n;
for (int i = 0; i < n; i++) {
double angle = i * perAngle;
int offset = 6 * i;
vertex[offset + 0] = (float)(Math.cos(angle) * radious) + cx;
vertex[offset + 1] = -height;
vertex[offset + 2] = (float)(Math.sin(angle) * radious) + cy;
vertex[offset + 3] = (float)(Math.cos(angle) * radious) + cx;
vertex[offset + 4] = height;
vertex[offset + 5] = (float)(Math.sin(angle) * radious) + cy;
topIndex[i] = (byte)(2*i);
baseIndex[i] = (byte)(2*i +1);
edgeIndex[2*i + 1] = baseIndex[i];
edgeIndex[2*i] = topIndex[i];
}
edgeIndex[2*n] = topIndex[0];
edgeIndex[2*n+1] = baseIndex[0];
ByteBuffer vbb = ByteBuffer
.allocateDirect(vertex.length * 4)
.order(ByteOrder.nativeOrder());
mFVertexBuffer = vbb.asFloatBuffer();
mFVertexBuffer.put(vertex);
mFVertexBuffer.position(0);
normalBuffer = mFVertexBuffer;
mCircleBottom = ByteBuffer.allocateDirect(baseIndex.length);
mCircleBottom.put(baseIndex);
mCircleBottom.position(0);
mCircleTop = ByteBuffer.allocateDirect(topIndex.length);
mCircleTop.put(topIndex);
mCircleTop.position(0);
mEdge = ByteBuffer.allocateDirect(edgeIndex.length);
mEdge.put(edgeIndex);
mEdge.position(0);
}
public void draw(GL10 gl)
{
gl.glCullFace(GL10.GL_BACK);
gl.glEnable(GL10.GL_CULL_FACE);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mFVertexBuffer);
gl.glNormalPointer(GL10.GL_FLOAT, 0, normalBuffer);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glPushMatrix();
gl.glColor4f(1f, 0, 0, 0);
gl.glDrawElements(GL10.GL_TRIANGLE_STRIP, numOfVertex * 2 + 2, GL10.GL_UNSIGNED_BYTE, mEdge);
gl.glPopMatrix();
gl.glPushMatrix();
gl.glColor4f(0.9f, 0, 0, 0);
gl.glDrawElements(GL10.GL_TRIANGLE_FAN, numOfVertex, GL10.GL_UNSIGNED_BYTE, mCircleTop);
gl.glPopMatrix();
gl.glPushMatrix();
gl.glTranslatef(0, 2*height, 0);
gl.glRotatef(-180, 1, 0, 0);
gl.glColor4f(0.9f,0, 0, 0);
gl.glDrawElements(GL10.GL_TRIANGLE_FAN, numOfVertex , GL10.GL_UNSIGNED_BYTE, mCircleBottom);
gl.glPopMatrix();
}
private FloatBuffer mFVertexBuffer;
private FloatBuffer normalBuffer;
private ByteBuffer mCircleBottom;
private ByteBuffer mCircleTop;
private ByteBuffer mEdge;
private int numOfVertex;
private int cx = 0;
private int cy = 0;
private int height = 1;
private float radious = 1;
}
相關問題
- 1. 使用GLUT繪製圓錐體和圓柱體
- 2. 在圓柱體內用相機視圖繪製html5畫布圓柱體
- 3. 如何使用webgl繪製圓柱體幾何圖形?
- 4. 如何使用gl_polygon繪製三維圓柱體
- 5. 如何在OpenTK(.Glu.Cylinder)中繪製圓柱體?
- 6. 如何在y或x軸上繪製圓柱體opengl
- 7. 如何繪製彎曲的圓柱體c#打開gl
- 8. 如何在html5畫布上繪製圓柱體
- 9. OpenGL:三角帶環 - 如何繪製圓柱體?
- 10. 如何繪製連接OpenGL中兩個點的圓柱體
- 11. 如何在Android上的OpenGL-es中繪製圓柱體?
- 12. 如何在renderscript中製作圓柱體
- 13. 現代OpenGL:繪製球體和圓柱體
- 14. 使用vbo在OpenGL中繪製圓柱體
- 15. 使用three.js繪製一個切割出圓柱體的圓柱體的最簡單方法是什麼?
- 16. 如何用JavaFX創建空心圓柱體和圓錐體?
- 17. 在DirectX中試圖通過D3DXCreateCylinder繪製圓柱體
- 18. 將圓柱體模型繪製爲粗3d線
- 19. 如何繪製橢圓體與陰謀
- 20. 查看圓柱體內部
- 21. 圓柱投影到球體
- 22. X3dom:旋轉圓柱體
- 23. 創建透明圓柱體
- 24. 如何繪製實心圓?
- 25. 如何繪製圓角NSImage
- 26. 如何繪製軸橢圓
- 27. 如何繪製圓形libgdx
- 28. 如何繪製半圓
- 29. 如何在圓圈內繪製圓形?
- 30. Pyqtgraph:如何繪製橢圓或圓形
感謝您的答覆。不過,我被告知,你可以通過使用'quads'在OpenGLES中繪製一個圓柱體。在這一點上我想避免使用3D建模軟件。任何人都可以給出更具體的答案嗎? – RexOnRoids 2009-06-29 06:10:00