Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Alex Astafiev                        2:5000/228.16  25 Apr 2002  11:17:02
 To : Evgeniy Jirnov
 Subject : Помогите pls...
 -------------------------------------------------------------------------------- 
 
 
  EJ> Сабж, а то я с математикой и векторами не очень дружу: есть квадратный
  EJ> рисунок размером NxN, как нарисовать 3-х мерный куб(6-ти гранный),
  EJ> каждая сторона которого будет покрыта этим рисунком? Причем
  EJ> длина/высота/ширина куба - совпадает с картинкой - N.
  EJ>
  EJ> В общем-то мне надо узнать как одну сторону(повернутую на
  EJ> XAngle,YAngle и/или ZAngle) нарисовать с текстурой, а с остальными я
  EJ> уж сам как-нибудь. Подскажите как можно более проще, а то я в этом как
  EJ> свинья в апельсинах.
 
 читай texture mapping
 Тебе нужно афинное текстурирование (affine texture mapping).
 можешь скомпилять мой старый тестовый код opengl под windows и Glut library -
 текстурированый  вращающийся кубик с освещением.
 если установлен MSCV++ то достаточно в командной строке набрать cl texcube.c
 думаю, в пяти функциях из одних вызовов OpenGL каждый разберется.
 ==== Begin of texcube.c ====
 /* Lit textured cube by A.Raider Flashinc`99 */
 #include <GL/glut.h>
 #pragma comment( lib, "opengl32.lib" )
 #pragma comment( lib, "glu32.lib" )
 #pragma comment( lib, "glut32.lib" )
 typedef unsigned char byte;
 typedef struct { byte r, g, b, a; } RGBA;
 RGBA texture[256][256];
 GLuint texName;
 #include "cube.h"
 
 void make_texture( void )
 {
  int i, j;
  for( i = 0; i < 256; i++ )
  {
   for( j = 0; j < 256; j++ )
   {
    texture[i][j].r = i << 1 ^ j << 1;
    texture[i][j].g = i << 2 ^ j << 2;
    texture[i][j].b = i << 2 ^ -j << 2;
    texture[i][j].a = 255;
   }
  }
  glGenTextures( 1, texName );
  glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR
 );
  glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR
 );
  gluBuild2DMipmaps( GL_TEXTURE_2D, 4, 256, 256, GL_RGBA, GL_UNSIGNED_BYTE,
          texture );
  glEnable( GL_TEXTURE_2D );
 }
 
 void display_function( void )
 {
  static GLfloat spin;
 
  glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
  glLoadIdentity();
  gluLookAt( 0, 0, 5, 0, 0, 0, 0, 1, 0 );
  glRotatef( spin++, 1, 0, 1 );
  glBindTexture( GL_TEXTURE_2D, texName );
  cube();
  glutSwapBuffers();
 }
 
 void resize_function( int width, int height )
 {
  glViewport( 0, 0, width, height );
  glMatrixMode( GL_PROJECTION );
  glLoadIdentity();
  gluPerspective( 45.0, (float)width / (float)height, 0.5, 100.0 );
  glMatrixMode( GL_MODELVIEW );
 }
 
 void idle_function( void )
 {
  glutPostRedisplay();
 }
 
 int main( int argc, char *argv[] )
 {
  glutInit( &argc, argv );
  glutInitWindowPosition( 200, 200 );
  glutInitWindowSize( 640, 480 );
  glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH );
  glutCreateWindow( argv[0] );
  glutReshapeFunc( resize_function );
  glutIdleFunc( idle_function );
  glutDisplayFunc( display_function );
  glEnable( GL_DEPTH_TEST );
  glEnable( GL_CULL_FACE );
  glEnable( GL_LIGHTING );
  glEnable( GL_LIGHT0 );
  make_texture();
  glutMainLoop();
  return 0;
 }
 ==== End of texcube.c ====
 
 рядом должен лежать include-файл с процедурой построения кубика:
 можно взамен пользоваться ф-цией glutSolidCube().
 
 ==== Begin of cube.h ====
 void cube()
 {
  glBegin( GL_QUADS );
 
  /* Front Face */
  glNormal3f( 0, 0, 1 );
  glTexCoord2f( 0, 0 );
  glVertex3f( -1, -1, 1 );
  glTexCoord2f( 1, 0 );
  glVertex3f( 1, -1, 1 );
  glTexCoord2f( 1, 1 );
  glVertex3f( 1, 1, 1 );
  glTexCoord2f( 0, 1 );
  glVertex3f( -1, 1, 1 );
 
  /* Back Face */
  glNormal3f( 0, 0, -1 );
  glTexCoord2f( 1, 0 );
  glVertex3f( -1, -1, -1 );
  glTexCoord2f( 1, 1 );
  glVertex3f( -1, 1, -1 );
  glTexCoord2f( 0, 1 );
  glVertex3f( 1, 1, -1 );
  glTexCoord2f( 0, 0 );
  glVertex3f( 1, -1, -1 );
 
  /* Top Face */
  glNormal3f( 0, 1, 0 );
  glTexCoord2f( 0, 1 );
  glVertex3f( -1, 1, -1 );
  glTexCoord2f( 0, 0 );
  glVertex3f( -1, 1, 1 );
  glTexCoord2f( 1, 0 );
  glVertex3f( 1, 1, 1 );
  glTexCoord2f( 1, 1 );
  glVertex3f( 1, 1, -1 );
 
  /* Bottom Face */
  glNormal3f( 0, -1, 0 );
  glTexCoord2f( 1, 1 );
  glVertex3f( -1, -1, -1 );
  glTexCoord2f( 0, 1 );
  glVertex3f( 1, -1, -1 );
  glTexCoord2f( 0, 0 );
  glVertex3f( 1, -1, 1 );
  glTexCoord2f( 1, 0 );
  glVertex3f( -1, -1, 1 );
 
  /* Right face */
  glNormal3f( 1, 0, 0 );
  glTexCoord2f( 1, 0 );
  glVertex3f( 1, -1, -1 );
  glTexCoord2f( 1, 1 );
  glVertex3f( 1, 1, -1 );
  glTexCoord2f( 0, 1 );
  glVertex3f( 1, 1, 1 );
  glTexCoord2f( 0, 0 );
  glVertex3f( 1, -1, 1 );
 
  /* Left Face */
  glNormal3f( -1, 0, 0 );
  glTexCoord2f( 0, 0 );
  glVertex3f( -1, -1, -1 );
  glTexCoord2f( 1, 0 );
  glVertex3f( -1, -1, 1 );
  glTexCoord2f( 1, 1 );
  glVertex3f( -1, 1, 1 );
  glTexCoord2f( 0, 1 );
  glVertex3f( -1, 1, -1 );
  glEnd();
 }
 ==== End of cube.h ====
 
 ---
  * Origin: Alex Raider/ Flash inc. 1992-2002 (2:5000/228.16)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Помогите pls...   Evgeniy Jirnov   24 Apr 2002 20:48:38 
 Мадератор прости за флейм   Karim Rafikov   25 Apr 2002 08:31:22 
 Помогите pls...   Vovanius Uryvaeff   25 Apr 2002 13:57:49 
 Помогите pls...   Alex Astafiev   25 Apr 2002 11:17:02 
 Помогите pls...   Michael Bolotnicov   07 Jun 2002 21:25:00 
Архивное /ru.algorithms/174643cc847aa.html, оценка 3 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional