그래서 삼각형 클래스가 있고 삼각형의 인스턴스를 그려야하지만 몇 가지 이유로 단 하나만 그려지고 그 뒤에있는 논리는 저를 넘어 있습니다.OpenGl, 여러 삼각형 객체 그리기 C#
나는 주변을 둘러 보았지만, 발견 된 것은 모든 삼각형이 같은 파일에 그려지는 예입니다.
이 삼각형 클래스입니다 : 여기
public class Triangle:IGameObject
{
Vector3 position;
int speed;
public Triangle(int speed, Vector3 vec) {
this.speed = speed;
position = new Vector3(vec);
}
public void Update() { }
public void Render()
{
Gl.glPushMatrix();
Gl.glRotated(speed*Time.deltaTime,speed*Time.deltaTime,speed*Time.deltaTime,speed*Time.deltaTime);
Gl.glBegin(Gl.GL_TRIANGLE_STRIP);
Gl.glColor3f(1.0f, 0.0f, 0.0f);
Gl.glVertex3d(position.x, 0, 0);
Gl.glColor3d(0.0, 1.0, 0.0);
Gl.glVertex3d(position.y, 0, 0);
Gl.glColor3d(0.0, 0.0, 1.0);
Gl.glVertex3d(0, position.z, 0);
Gl.glEnd();
Gl.glPopMatrix();
}
}
내가 그것을 사용하여 난 후 (또는 이전) 행렬을 취소해야한다고 보았다 생각 Form.cs
public partial class Form1 : Form
{
Triangle _trA = new Triangle(100, new Vector3(0.1f,-0.2f,0.2f));
Triangle _trB = new Triangle(50, new Vector3(0.5f, 0.3f, -0.1f));
public Form1()
{
InitializeComponent();
_openGLControl.InitializeContexts();
if (_fullscreen)
{
FormBorderStyle = FormBorderStyle.None;
WindowState = FormWindowState.Maximized;
}
else {
ClientSize = new Size(1280,720);
}
}
void GameLoop()
{
Gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT);
_trA.Render();
_trB.Render();
_openGLControl.Refresh();
}
}
입니다 객체이지만 그것을 알아낼 수는 없습니다.
아이디어가 있으십니까?
이glPush/glPop
당신은 당신의 Render()
방법의 시작 부분에
Gl.glPushMatrix();
를 호출해야하고, 상기
Gl.glPopMatrix();
:
그것을 할 수 있습니다. 내가 얻는 것은 정상에있는 삼각형과 깜박 거릴 것 같은 다른 두 개입니다. 어쨌든 고마워. – Everts
@fafase 다른 값으로 회전했는지 확인 했습니까? 'Gl.glRotated (speed * Time.deltaTime, speed * Time.deltaTime, speed * Time.deltaTime, speed * Time.deltaTime); 매개 변수의 값을 출력한다. 삼각형 (같은 위치에 있으므로 하나처럼 보임) – Boris
좋아, 나는 진보 해. 지금 내가 가진 것은 다른 삼각형 객체를 얻지 만 문제는 순환 게재로 남아 있습니다. 그들은 당신이 말했듯이 둘 다 회전을 반복합니다. 그러나 회전하기 전에 glPushMatrix()를 넣으면 아무런 움직임이 없습니다. – Everts