2012-03-31 5 views
0

Таким образом, у меня есть проблемы с моим двигателем, что я работаю прямо сейчас:OpenGL Перемещение каре

img

Дело в том, что она должна генерировать 16x16 платформу из них.

Это код, который создает кубики:

private void render(){ 



     GL11.glClear(GL11.GL_COLOR_BUFFER_BIT|GL11.GL_DEPTH_BUFFER_BIT); 
     for(int x=0; x<16; x++){ 
      for(int z=0; z<16; z++) { 


       b.renderBlock(x, 0, z, texture); 

      } 
     } 

     glMatrixMode(GL_MODELVIEW); 
     GL11.glClearColor(1.0f, 1.0f, 1.0f, 0.0f); 
     GL11.glEnable(GL_CULL_FACE); 
     GL11.glLoadIdentity(); 

    } 

Это должны оказывать 16x16 платформу блоков

Block.java (b.renderblock)

package net.themorfeus.awesum.adventure.game; 

import org.lwjgl.opengl.GL11; 
import org.newdawn.slick.opengl.Texture; 

public class Block { 

    private float rquad = 0f; 

    public void renderBlock(int posx, int posy, int posz, Texture t) { 
     t.bind(); 
     //GL11.glLoadIdentity();       // Reset The Current Modelview Matrix 
     GL11.glTranslatef(posx,posy,posz);    // Move Right 1.5 Units And Into The Screen 6.0 
     GL11.glRotatef(rquad,0.0f,0.0f,1.0f);    // Rotate The Quad On The X axis (NEW) 
     GL11.glColor3f(1.0f,1.0f,1.0f);     // Set The Color To Blue One Time Only 
     GL11.glBegin(GL11.GL_QUADS);     // Draw A Quad 
     //GL11.glColor3f(0.5f, 0.4f, 0.4f);    // Set The Color To Green 
     GL11.glTexCoord2f(0,0); 
     GL11.glVertex3f(1f, 1f,-1f);   // Top Right Of The Quad (Top) 
     GL11.glTexCoord2f(1,0); 
     GL11.glVertex3f(-1f, 1f,-1f);   // Top Left Of The Quad (Top) 
     GL11.glTexCoord2f(1,1); 
     GL11.glVertex3f(-1f, 1f, 1f);   // Bottom Left Of The Quad (Top) 
     GL11.glTexCoord2f(0,1); 
     GL11.glVertex3f(1f, 1f, 1f);   // Bottom Right Of The Quad (Top) 

     //GL11.glColor3f(1.2f,0.5f,0.9f);    // Set The Color To Orange 
     GL11.glTexCoord2f(0,0); 
     GL11.glVertex3f(1f,-1f, 1f);   // Top Right Of The Quad (Bottom) 
     GL11.glTexCoord2f(0,1); 
     GL11.glVertex3f(-1f,-1f, 1f);   // Top Left Of The Quad (Bottom) 
     GL11.glTexCoord2f(1,1); 
     GL11.glVertex3f(-1f,-1f,-1f);   // Bottom Left Of The Quad (Bottom) 
     GL11.glTexCoord2f(1,0); 
     GL11.glVertex3f(1f,-1f,-1f);   // Bottom Right Of The Quad (Bottom) 

     //GL11.glColor3f(1.0f,0.0f,0.0f);    // Set The Color To Red 
     GL11.glTexCoord2f(0,0); 
     GL11.glVertex3f(1f, 1f, 1f);   // Top Right Of The Quad (Front) 
     GL11.glTexCoord2f(1,0); 
     GL11.glVertex3f(-1f, 1f, 1f);   // Top Left Of The Quad (Front) 
     GL11.glTexCoord2f(1,1); 
     GL11.glVertex3f(-1f,-1f, 1f);   // Bottom Left Of The Quad (Front) 
     GL11.glTexCoord2f(0,1); 
     GL11.glVertex3f(1f,-1f, 1f);   // Bottom Right Of The Quad (Front) 

     //GL11.glColor3f(1f,0.5f,0.0f);    // Set The Color To Yellow 
     GL11.glTexCoord2f(0,0); 
     GL11.glVertex3f(1f,-1f,-1f);   // Bottom Left Of The Quad (Back) 
     GL11.glTexCoord2f(1,0); 
     GL11.glVertex3f(-1f,-1f,-1f);   // Bottom Right Of The Quad (Back) 
     GL11.glTexCoord2f(1,1); 
     GL11.glVertex3f(-1f, 1f,-1f);   // Top Right Of The Quad (Back) 
     GL11.glTexCoord2f(0,1); 
     GL11.glVertex3f(1f, 1f,-1f);   // Top Left Of The Quad (Back) 

     //GL11.glColor3f(0.0f,0.0f,0.3f);    // Set The Color To Blue 
     GL11.glTexCoord2f(0,1); 
     GL11.glVertex3f(-1f, 1f, 1f);   // Top Right Of The Quad (Left) 
     GL11.glTexCoord2f(1,1); 
     GL11.glVertex3f(-1f, 1f,-1f);   // Top Left Of The Quad (Left) 
     GL11.glTexCoord2f(1,0); 
     GL11.glVertex3f(-1f,-1f,-1f);   // Bottom Left Of The Quad (Left) 
     GL11.glTexCoord2f(0,0); 
     GL11.glVertex3f(-1f,-1f, 1f);   // Bottom Right Of The Quad (Left) 

     //GL11.glColor3f(0.5f,0.0f,0.5f);    // Set The Color To Violet 
     GL11.glTexCoord2f(0,0); 
     GL11.glVertex3f(1f, 1f,-1f);   // Top Right Of The Quad (Right) 
     GL11.glTexCoord2f(1,0); 
     GL11.glVertex3f(1f, 1f, 1f);   // Top Left Of The Quad (Right) 
     GL11.glTexCoord2f(1,1); 
     GL11.glVertex3f(1f,-1f, 1f);   // Bottom Left Of The Quad (Right) 
     GL11.glTexCoord2f(0,1); 
     GL11.glVertex3f(1f,-1f,-1f);   // Bottom Right Of The Quad (Right) 
     GL11.glEnd(); 
     //rquad+=0.0000001f; 

    } 




} 

Это в основном делает блок-каре ,

+1

Просто предложение: вам действительно нужно избавиться от этого кода немедленного режима ('glBegin() ... glEnd()'). Все служебные служебные вызовы функции достаточно плохие в собственном коде, пересечение границы JNI не улучшает ее. Используйте Vertex Arrays и Vertex Buffer Objects. – datenwolf

ответ

2

You shoud окружает ваш рисунок/перевод glPushMatrix - glPopMatrix пара.

+0

Это сработало, спасибо: D – TheMorfeus

+0

Эй, у меня также есть еще одна эмблема - мои блоки перекрываются. например, 2-й блок начинается с 1/3-го первого и т. д. Как это исправить? – TheMorfeus

+0

Ваш блок имеет длину в 2 единицы в каждом направлении (от -1 до +1), поэтому вы должны перемещаться по краям 2. Также блоки расположены по центру локальной 0-точки, поэтому ваш glTranslate должен перемещаться в позиции 2 [ x, y, z] + 0,5. Pro Tip: Возьмите карандаш и бумагу и нарисуйте эти вещи руками. – datenwolf

Смежные вопросы