일치하는 큐브를보고 삭제하는 '블록'게임을 만들려고합니다. 이 코드는 두 개의 큐브를 만들고이를 y 축을 따라 이동합니다. 그런 다음 사라지기로되어 있고 다른 곳에 100 큐브가 나타납니다. 내 문제는 큐브를 사라지게 만드는 방법이나 '큐브 생성'기능을 작성하는 방법을 모르겠다. 나는 3D로 글을 쓰고있다. 내가 어떻게해야하는지에 대한 도움.OpenGL에서 임의로 큐브를 생성하는 방법/C#
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Tao.OpenGl;
using System.Threading;
using Tao.FreeGlut;
namespace TAOSample
{
class VertexDania{
double vx, vy , vz;
public double X{
get{return vx;}
set{ vx = value;}
}
public double Y{
get{return vy;}
set{ vy = value;}
}
public double Z{
get{return vz;}
set{ vz = value;}
}
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
simpleOpenGlControl1.InitializeContexts();
Gl.glClearColor(1, 1, 0, 0);
Gl.glClearDepth(1.0);
Gl.glMatrixMode(Gl.GL_PROJECTION);
Gl.glLoadIdentity();
Glu.gluPerspective(45, simpleOpenGlControl1.Height /(double)simpleOpenGlControl1.Width, 0.1, 1000);
Gl.glViewport(0, 0, simpleOpenGlControl1.Width, simpleOpenGlControl1.Height);
Tao.FreeGlut.Glut.glutInit();
}
private void simpleOpenGlControl1_Paint(object sender, PaintEventArgs e)
{
Gl.glEnable(Gl.GL_LIGHTING);
Gl.glEnable(Gl.GL_LIGHT0);
Gl.glEnable(Gl.GL_COLOR_MATERIAL);
Gl.glEnable(Gl.GL_DEPTH_TEST);
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);
Gl.glLoadIdentity();
VertexDania[] points = new VertexDania[]
{
new VertexDania{X=0 , Y=0.73 , Z=-0.75},
new VertexDania{X=0.1 , Y=0.85 , Z=-0.75},
new VertexDania{X=-0.01 , Y=0.95 , Z=-0.75},
new VertexDania{X=-0.1 , Y=0.80 , Z=-0.75},
new VertexDania{X=0.1 , Y=0.65 , Z=-1},
new VertexDania{X=0 , Y=0.5 , Z=-0.75},
new VertexDania{X=-0.1 , Y=0.6 , Z=-1}
};
VertexDania[] point = new VertexDania[]
{
new VertexDania{X=0, Y=0.23, Z=-0.75},
new VertexDania{X=0.1 , Y=0.35 , Z=-0.75},
new VertexDania{X=-0.01 , Y=0.45 , Z=-0.75},
new VertexDania{X=-0.1 , Y=0.30 , Z=-0.75},
new VertexDania{X=0.1 , Y=0.1 , Z=-0.75},
new VertexDania{X=0 , Y=0.0 , Z=-0.75},
new VertexDania{X=-0.1, Y=0.1, Z=-0.75}
};
double[,] normals = new double[,]
{
{0,0,1},
{0,0,-1},
{0,0,-1}
};
int[,] faces = new int[,]
{
{0 , 1 ,4 , 5},
{0 , 3 , 6 , 5},
{0, 3 , 2 , 1}
};
Gl.glColor3d(1, 0, 0);
Gl.glTranslated(0, ymove, 0.1);
for (int i = 0; i < faces.GetLength(0); i++)
{
Gl.glNormal3d(normals[i, 0], normals[i, 1], normals[i, 2]);
Gl.glBegin(Gl.GL_QUADS);
for (int j = 0; j < 4; j++)
{
Gl.glVertex3d(points[faces[i, j]].X, points[faces[i, j]].Y, points[faces[i, j]].Z);
}
Gl.glEnd();
Gl.glNormal3d(normals[i, 0], normals[i, 1], normals[i, 2]);
Gl.glBegin(Gl.GL_QUADS);
for (int j = 0; j < 4; j++)
{
Gl.glVertex3d(point[faces[i, j]].X, point[faces[i, j]].Y, point[faces[i, j]].Z);
}
Gl.glEnd();
}
if (ymove >= -3)
ymove -= 0.03;
}
void redrawThread()
{
while (true)
{
Thread.Sleep(50);
simpleOpenGlControl1.Invoke(new Action(delegate()
{
simpleOpenGlControl1.Draw();
}));
}
}
private void Form1_Load(object sender, EventArgs e)
{
Thread t = new Thread(redrawThread);
t.IsBackground = true;
t.Start();
}
private void simpleOpenGlControl1_Resize(object sender, EventArgs e)
{
Gl.glMatrixMode(Gl.GL_PROJECTION);
Gl.glLoadIdentity();
Glu.gluPerspective(45, simpleOpenGlControl1.Width/(double)simpleOpenGlControl1.Height, 0.1, 100);
Gl.glViewport(0, 0, simpleOpenGlControl1.Width, simpleOpenGlControl1.Height);
// Gl.glMatrixMode(Gl.GL_MODELVIEW);
}
}
}
여기서 달성하고자하는 것을 설명하기 위해 더 많은 노력을 기울여야합니다. – Grimmy
내 주요 문제 빨간색, 녹색 및 파란색의 세 가지 기본 색상으로 임의로 큐브를 생성하는 함수가 필요합니다. –