JREGC

Главная | Регистрация | Вход Приветствую Вас Инопланетяне | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: wawe  
Форум » PROGRAMMING CATEGORY » Уроки LWJGL » Делаем 3D игру вместе #3 (текстуры)
Делаем 3D игру вместе #3
waweДата: Понедельник, 12.11.2012, 19:59 | Сообщение # 1
Просто человек...
Группа: Администраторы
Сообщений: 50
Награды: 3
Статус: Offline
В этот раз нам нужно создать три куба с разными текстурами.
Создайте новый класс TexLoad и впишите в него этот код:
Код

import java.io.IOException;

import org.newdawn.slick.opengl.Texture;
import org.newdawn.slick.opengl.TextureLoader;
import org.newdawn.slick.util.ResourceLoader;

public class TexLoad {

     public static Texture wood, box;

     protected static Main main = new Main();

     public static void init() {
      try {
       wood = TextureLoader.getTexture("PNG",
         ResourceLoader.getResourceAsStream("res/texture/wood.png"));
       box = TextureLoader.getTexture("PNG",
         ResourceLoader.getResourceAsStream("res/texture/box.png"));
      } catch (IOException e) {
       System.err.println("Error: TexLoader");
       e.printStackTrace();
       main.cleanUp(true);
      }
     }
}


Теперь откройте ваш класс Main
и в конструкторе Main удалите все, чтобы он был пуст.
Теперь создайте новый метод World();
и впишите в него это:
Код

      // дерево снизу
      quad.add(new Quad(4, 0.1f, 4, 6, 2.1f, 6, 1, 1, 1, 1, 1, true, true,
        true, true, true, true));
      // ящик сверху
      quad.add(new Quad(4, 2.1f, 4, 6, 4.1f, 6, 2, 1, 1, 1, 1, true, true,
        true, true, true, true));

(это вы делаете для того, чтобы создавать кубы только один раз).
А теперь в методе GET_INIT_RUNNING(), до цикла while();
Впишите это:
TexLoad.init();
А после этого метода следующее...
World();
(сначала мы создаем кубы, а потом крепим к ним текстуры).
Теперь откройте Класс Quad и замените весь код на новый:
Код

import java.util.Random;

import org.lwjgl.opengl.GL11;

public class Quad {

     float x1, y1, z1, x2, y2, z2, centerX, centerY, centerZ;
     float width, height, length;
     float yTop2;
     float yTop, yBottom;
     int num;
     float cX2, cY2, cZ2;
     float texSize;
     boolean top, bottom, front, back, left_side, right_side;

     Random r = new Random();

     public Quad(float startX, float startY, float startZ, float endX,
       float endY, float endZ, int number, float gh, float hj, float yu,
       float jop, boolean oko, boolean gyo, boolean dfu, boolean qrt,
       boolean bnjf, boolean ghiop) {
      x1 = startX;
      y1 = startY;
      z1 = startZ;
      x2 = endX;
      y2 = endY;
      z2 = endZ;
      width = x2 - x1;
      height = y2 - y1;
      length = z2 - z1;
      centerX = x1 + (width / 2);
      centerY = y2 + (height / 2);
      centerZ = z1 + (length / 2);
      yTop = Math.abs(y2 - y1);
      yBottom = y1 + yTop - height;
      num = number;
      cX2 = gh;
      cY2 = hj;
      cZ2 = yu;
      texSize = jop;
      top = oko;
      bottom = gyo;
      front = dfu;
      back = qrt;
      left_side = bnjf;
      right_side = ghiop;
     }

     public Quad() {

     }

     public void texNum() {
      if (num == 1) {
       TexLoad.wood.bind();
      }
      if (num == 2) {
       TexLoad.box.bind();
      }
     }

     public void render() {
      GL11.glColor3f(cX2, cY2, cZ2);
      texNum();
      if (top) {
       GL11.glPushMatrix();
       GL11.glBegin(GL11.GL_QUADS);
       GL11.glTexCoord2f(0, 0);
       GL11.glNormal3f(x1, y1, z1);
       GL11.glVertex3f(x1, y1, z1);
       GL11.glTexCoord2f(texSize, 0);
       GL11.glNormal3f(x1 + width, y1, z1);
       GL11.glVertex3f(x1 + width, y1, z1);
       GL11.glTexCoord2f(texSize, texSize);
       GL11.glNormal3f(x1 + width, y1, z1 + length);
       GL11.glVertex3f(x1 + width, y1, z1 + length);
       GL11.glTexCoord2f(0, texSize);
       GL11.glNormal3f(x1, y1, z1 + length);
       GL11.glVertex3f(x1, y1, z1 + length);
       GL11.glEnd();
       GL11.glPopMatrix();
      }
      // GL11.glColor3f(0.2f, 0.2f, 0.2f);
      if (bottom) {
       GL11.glPushMatrix();
       GL11.glBegin(GL11.GL_QUADS);
       GL11.glTexCoord2f(0, 0);
       GL11.glNormal3f(x1, y1 + height, z1);
       GL11.glVertex3f(x1, y1 + height, z1);
       GL11.glTexCoord2f(texSize, 0);
       GL11.glNormal3f(x1 + width, y1 + height, z1);
       GL11.glVertex3f(x1 + width, y1 + height, z1);
       GL11.glTexCoord2f(texSize, texSize);
       GL11.glNormal3f(x1 + width, y1 + height, z1 + length);
       GL11.glVertex3f(x1 + width, y1 + height, z1 + length);
       GL11.glTexCoord2f(0, texSize);
       GL11.glNormal3f(x1, y1 + height, z1 + length);
       GL11.glVertex3f(x1, y1 + height, z1 + length);
       GL11.glEnd();
       GL11.glPopMatrix();
      }
      // GL11.glColor3f(0.4f, 0.4f, 0.4f);
      if (front) {
       GL11.glPushMatrix();
       GL11.glBegin(GL11.GL_QUADS);
       GL11.glTexCoord2f(0, 0);
       GL11.glNormal3f(x1, y1, z1);
       GL11.glVertex3f(x1, y1, z1);
       GL11.glTexCoord2f(texSize, 0);
       GL11.glNormal3f(x1 + width, y1, z1);
       GL11.glVertex3f(x1 + width, y1, z1);
       GL11.glTexCoord2f(texSize, texSize);
       GL11.glNormal3f(x1 + width, y1 + height, z1);
       GL11.glVertex3f(x1 + width, y1 + height, z1);
       GL11.glTexCoord2f(0, texSize);
       GL11.glNormal3f(x1, y1 + height, z1);
       GL11.glVertex3f(x1, y1 + height, z1);
       GL11.glEnd();
       GL11.glPopMatrix();
      }
      // GL11.glColor3f(0.4f, 0.4f, 0.4f);
      if (back) {
       GL11.glPushMatrix();
       GL11.glBegin(GL11.GL_QUADS);
       GL11.glTexCoord2f(0, 0);
       GL11.glNormal3f(x1, y1, z1 + length);
       GL11.glVertex3f(x1, y1, z1 + length);
       GL11.glTexCoord2f(texSize, 0);
       GL11.glNormal3f(x1 + width, y1, z1 + length);
       GL11.glVertex3f(x1 + width, y1, z1 + length);
       GL11.glTexCoord2f(texSize, texSize);
       GL11.glNormal3f(x1 + width, y1 + height, z1 + length);
       GL11.glVertex3f(x1 + width, y1 + height, z1 + length);
       GL11.glTexCoord2f(0, texSize);
       GL11.glNormal3f(x1, y1 + height, z1 + length);
       GL11.glVertex3f(x1, y1 + height, z1 + length);
       GL11.glEnd();
       GL11.glPopMatrix();
      }
      // GL11.glColor3f(1.0f, 1.0f, 1.0f);
      if (left_side) {
       GL11.glPushMatrix();
       GL11.glBegin(GL11.GL_QUADS);
       GL11.glTexCoord2f(0, 0);
       GL11.glNormal3f(x1, y1, z1);
       GL11.glVertex3f(x1, y1, z1);
       GL11.glTexCoord2f(texSize, 0);
       GL11.glNormal3f(x1, y1, z1 + length);
       GL11.glVertex3f(x1, y1, z1 + length);
       GL11.glTexCoord2f(texSize, texSize);
       GL11.glNormal3f(x1, y1 + height, z1 + length);
       GL11.glVertex3f(x1, y1 + height, z1 + length);
       GL11.glTexCoord2f(0, texSize);
       GL11.glNormal3f(x1, y1 + height, z1);
       GL11.glVertex3f(x1, y1 + height, z1);
       GL11.glEnd();
       GL11.glPopMatrix();
      }
      // GL11.glColor3f(1.0f, 1.0f, 1.0f);
      if (right_side) {
       GL11.glPushMatrix();
       GL11.glBegin(GL11.GL_QUADS);
       GL11.glTexCoord2f(0, 0);
       GL11.glNormal3f(x1 + width, y1, z1);
       GL11.glVertex3f(x1 + width, y1, z1);
       GL11.glTexCoord2f(texSize, 0);
       GL11.glNormal3f(x1 + width, y1, z1 + length);
       GL11.glVertex3f(x1 + width, y1, z1 + length);
       GL11.glTexCoord2f(texSize, texSize);
       GL11.glNormal3f(x1 + width, y1 + height, z1 + length);
       GL11.glVertex3f(x1 + width, y1 + height, z1 + length);
       GL11.glTexCoord2f(0, texSize);
       GL11.glNormal3f(x1 + width, y1 + height, z1);
       GL11.glVertex3f(x1 + width, y1 + height, z1);
       GL11.glEnd();
       GL11.glPopMatrix();
      }
      // создание цвета по умолчанию
      GL11.glColor3f(1.0f, 1.0f, 1.0f);
     }
}

в классе Camera замените метод collision();
на новый:
Код

     public void collisions(float offset) {
      if (!ontopOfCollidablePoly(offset)) {
       yBottom = 0;
      }
      for (Quad v : world.quad) {
       if (Math.abs(vector.x - v.centerX) < (v.width / 2) + 0.2f
         && Math.abs(vector.z - v.centerZ) < (v.length / 2) + 0.2f) {
        if ((Math.abs(vector.y - v.y2) < v.height + (offset))
          || vector.y > v.yBottom + v.height - 0.5f) {
         if (vector.y > v.y2 - 0.01f) {
          yBottom = v.y1 + v.yTop;
         } else {
          if (Math.abs(vector.x - v.centerX) < (v.width / 2) + 0.2f) {
           vector.x = previous.x;
          }
          if (Math.abs(vector.z - v.centerZ) < (v.length / 2) + 0.2f) {
           vector.z = previous.z;
          }
         }
        } else if (v.yBottom > vector.y + 2.4f) {
         if (vector.y + 3 > v.y1) {
          yMotion = 0;
          vector.y = v.y1 - 3;
         }
        } else {
         vector.x = previous.x;
         vector.y = previous.y;
         vector.z = previous.z;
        }
       }
      }
     }

А вот текстуры:


А вот полный код


Вот что должно получиться:
 
waweДата: Понедельник, 12.11.2012, 20:02 | Сообщение # 2
Просто человек...
Группа: Администраторы
Сообщений: 50
Награды: 3
Статус: Offline
Задание на проверку ваших знаний.
Создайте новый куб, с новой текстурой так, чтобы получилась лестница
 
ProlДата: Среда, 09.01.2013, 17:50 | Сообщение # 3
Рядовой
Группа: Пользователи
Сообщений: 3
Награды: 0
Репутация: 0
Статус: Offline
Все суппер! Продолжай,плиз!!)
 
waweДата: Среда, 09.01.2013, 18:46 | Сообщение # 4
Просто человек...
Группа: Администраторы
Сообщений: 50
Награды: 3
Статус: Offline
Рад, что вам нравятся мои уроки.
 
kodoДата: Понедельник, 14.01.2013, 02:40 | Сообщение # 5
Рядовой
Группа: Пользователи
Сообщений: 7
Награды: 0
Репутация: 0
Статус: Offline
Да, уроки радуют! Спасибо!
Жду следующего!

Добавлено (14.01.2013, 02:40)
---------------------------------------------
Из замечаний:

1) ты пишешь: > Создайте новый класс TexNum и впишите в него этот код:
а на деле создать надо TexLoad.

2) Стоит сказать что текстуры надо поместить в res/texture/
3) А также про то что их нужно подключить к проекту(лично я делал так) - возможно тут я не совсем прав и можно просто правильно разместить папку.. джаву и эклипс пользую впервые, действовал по наитию, когда компилятор начал ругаться на ресурсы...

 
waweДата: Понедельник, 14.01.2013, 11:04 | Сообщение # 6
Просто человек...
Группа: Администраторы
Сообщений: 50
Награды: 3
Статус: Offline
kodo, все правильно
Спасибо за замечания.
 
waweДата: Понедельник, 14.01.2013, 11:10 | Сообщение # 7
Просто человек...
Группа: Администраторы
Сообщений: 50
Награды: 3
Статус: Offline
Что бы вы хотели узнать нового о LWJGL или OpenGL?
 
kodoДата: Понедельник, 14.01.2013, 12:21 | Сообщение # 8
Рядовой
Группа: Пользователи
Сообщений: 7
Награды: 0
Репутация: 0
Статус: Offline
Пока что: освещение, culing, загрузка готовых моделей.

Сообщение отредактировал kodo - Понедельник, 14.01.2013, 12:22
 
ProlДата: Воскресенье, 20.01.2013, 16:01 | Сообщение # 9
Рядовой
Группа: Пользователи
Сообщений: 3
Награды: 0
Репутация: 0
Статус: Offline
Я думаю, логично было бы продолжить и сделать комнату с объектами
 
waweДата: Воскресенье, 20.01.2013, 17:39 | Сообщение # 10
Просто человек...
Группа: Администраторы
Сообщений: 50
Награды: 3
Статус: Offline
Prol, хорошо. Но что вам мешает самому сделать комнату с объектами? Добавить новые блоки или модели с новыми текстурами
 
antonabramovДата: Понедельник, 05.08.2013, 06:26 | Сообщение # 11
Рядовой
Группа: Пользователи
Сообщений: 1
Награды: 0
Репутация: 0
Статус: Offline
wawe, продолжай делать уроки, и может канал сделаеш, мне лично понятней в видео, а так уроки супер и может попробуеш игру minecraft сделать это будет простой пример

war_man333
 
Форум » PROGRAMMING CATEGORY » Уроки LWJGL » Делаем 3D игру вместе #3 (текстуры)
  • Страница 1 из 1
  • 1
Поиск:

Copyright MyCorp © 2024
Используются технологии uCoz