如何在OpenTK中使用OpenGL繪製圓柱體?如何在OpenTK(.Glu.Cylinder)中繪製圓柱體?
回答
來自我的舊項目的示例代碼。這會創建一個「不加蓋」的圓柱體(頂部和底部是空的)。
int segments = 10; // Higher numbers improve quality
int radius = 3; // The radius (width) of the cylinder
int height = 10; // The height of the cylinder
var vertices = new List<Vector3>();
for (double y = 0; y < 2; y++)
{
for (double x = 0; x < segments; x++)
{
double theta = (x/(segments - 1)) * 2 * Math.PI;
vertices.Add(new Vector3()
{
X = (float)(radius * Math.Cos(theta)),
Y = (float)(height * y),
Z = (float)(radius * Math.Sin(theta)),
});
}
}
var indices = new List<int>();
for (int x = 0; x < segments - 1; x++)
{
indices.Add(x);
indices.Add(x + segments);
indices.Add(X + segments + 1);
indices.Add(x + segments + 1);
indices.Add(x + 1);
indices.Add(x);
}
您現在可以呈現這樣的汽缸:
GL.Begin(BeginMode.Triangles);
foreach (int index in indices)
GL.Vertex3(vertices[index]);
GL.End();
您也可以上傳頂點和索引到一個頂點緩衝區對象,以提高性能。
提琴手,你的代碼運作良好。你能解釋指數與頂點映射嗎?最初,您正在計算圓柱體的底部和頂部圓的頂點,然後將這些頂點映射到索引。我的序列不清楚。你可以在樣本圖像中標記這些段嗎? – 2014-07-13 09:58:32
頂點是三維空間中的點。索引描述如何將這些點連接成三角形(每個三角形有三個頂點)。有關更多詳情,請參閱此處:http://www.opentk.com/doc/chapter/2/opengl/geometry/primitives – 2014-07-13 14:34:20
生成圓柱體的幾何體非常簡單(讓我們考慮一個Z軸對齊圓柱體)。讓我用僞代碼:
points = list of (x,y,z)
where x = sin(a)*RADIUS, y = cos(a)*RADIUS, z = b,
for each a in [0..2*PI) with step StepA,
for each b in [0..HEIGHT] with step StepB
關於指數:讓我們假設N
等於圓柱(這取決於身高和步驟B)和M
等於數「水平」或「片」的數量每個「切片」上的點(取決於StepA)。
氣缸含有一些四邊形,每一個橫跨兩座相鄰的片,所以指數看起來像:
indices = list of (a,b,c,d)
where a = M * slice + point,
b = M * slice + (point+1) % M,
c = (M+1) * slice + (point+1) % M,
d = (M+1) * slice + point
for each slice in [0..N-2]
for each point in [0..M-1]
如果你需要法線的缸,它們易於產生:
normals = (x/RADIUS,y/RADIUS,0)
for each (x,y,z) in points
這就是圓柱體的圓形部分,你可能也想要「帽子」,但我相信它們很容易做到。
我將離開翻譯我的僞代碼到您選擇的語言的樂趣部分。 :)
剩下的就是創建/綁定VBO,加載幾何圖形,設置指針,使用選擇的着色器並調用glDrawArrays(...) - 任何OpenGL 3教程都應該覆蓋這個;你熟悉那個部分嗎?
- 1. 如何用OpenGLES繪製圓柱體?
- 2. 如何在renderscript中製作圓柱體
- 3. 如何在Android上的OpenGL-es中繪製圓柱體?
- 4. 在圓柱體內用相機視圖繪製html5畫布圓柱體
- 5. 如何繪製連接OpenGL中兩個點的圓柱體
- 6. 如何在y或x軸上繪製圓柱體opengl
- 7. 如何在html5畫布上繪製圓柱體
- 8. 使用GLUT繪製圓錐體和圓柱體
- 9. 在OpenTK中繪製一個四面體
- 10. 如何使用webgl繪製圓柱體幾何圖形?
- 11. 如何繪製彎曲的圓柱體c#打開gl
- 12. OpenGL:三角帶環 - 如何繪製圓柱體?
- 13. 如何使用gl_polygon繪製三維圓柱體
- 14. 使用vbo在OpenGL中繪製圓柱體
- 15. 在DirectX中試圖通過D3DXCreateCylinder繪製圓柱體
- 16. OpenGL:如何在OpenTK中繪製立方體?
- 17. 現代OpenGL:繪製球體和圓柱體
- 18. 使用three.js繪製一個切割出圓柱體的圓柱體的最簡單方法是什麼?
- 19. 將圓柱體模型繪製爲粗3d線
- 20. 如何繪製橢圓體與陰謀
- 21. 在Matplotlib中繪製一個以飛機爲中心的實心圓柱體
- 22. 如何使用OpenTK繪製三角形?
- 23. 如何使用OpenTK C繪製3D Hectogon#
- 24. 在Opengl中繪製橢圓球體
- 25. 如何在圓圈內繪製圓形?
- 26. 如何用JavaFX創建空心圓柱體和圓錐體?
- 27. 在圓柱座標中繪製單位矢量的堆棧 - matplotlib
- 28. 在OpenGL中用線性漸變紋理繪製圓柱
- 29. 在圓柱體中生成隨機點
- 30. 如何在android中繪製圓圈?
或任何OpenTK.Glu.Cylinder示例? – Chris 2010-11-13 17:34:53