Jeff Molofee - NeHe's OpenGL Tutorials

Здесь есть возможность читать онлайн «Jeff Molofee - NeHe's OpenGL Tutorials» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Жанр: Программирование, на английском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

NeHe's OpenGL Tutorials: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «NeHe's OpenGL Tutorials»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

NeHe's OpenGL Tutorials — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «NeHe's OpenGL Tutorials», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

void initBezier(void) {

mybezier.anchors[0][0] = makePoint(-0.75, –0.75, –0.50); // Set The Bezier Vertices

mybezier.anchors[0][1] = makePoint(-0.25, –0.75, 0.00);

mybezier.anchors[0][2] = makePoint( 0.25, –0.75, 0.00);

mybezier.anchors[0][3] = makePoint( 0.75, –0.75, –0.50);

mybezier.anchors[1][0] = makePoint(-0.75, –0.25, –0.75);

mybezier.anchors[1][1] = makePoint(-0.25, –0.25, 0.50);

mybezier.anchors[1][2] = makePoint( 0.25, –0.25, 0.50);

mybezier.anchors[1][3] = makePoint( 0.75, –0.25, –0.75);

mybezier.anchors[2][0] = makePoint(-0.75, 0.25, 0.00);

mybezier.anchors[2][1] = makePoint(-0.25, 0.25, –0.50);

mybezier.anchors[2][2] = makePoint( 0.25, 0.25, –0.50);

mybezier.anchors[2][3] = makePoint( 0.75, 0.25, 0.00);

mybezier.anchors[3][0] = makePoint(-0.75, 0.75, –0.50);

mybezier.anchors[3][1] = makePoint(-0.25, 0.75, –1.00);

mybezier.anchors[3][2] = makePoint( 0.25, 0.75, –1.00);

mybezier.anchors[3][3] = makePoint( 0.75, 0.75, –0.50);

mybezier.dlBPatch = NULL; // Go Ahead And Initialize This To NULL

}

This is basically just an optimised routine to load a single bitmap. It can easily be used to load an array of em just by putting it in a simple loop.

// Load Bitmaps And Convert To Textures

BOOL LoadGLTexture(GLuint *texPntr, char* name) {

BOOL success = FALSE;

AUX_RGBImageRec *TextureImage = NULL;

glGenTextures(1, texPntr); // Generate 1 Texture

FILE* test=NULL;

TextureImage = NULL;

test = fopen(name, "r"); // Test To See If The File Exists

if (test != NULL) { // If It Does

fclose(test); // Close The File

TextureImage = auxDIBImageLoad(name); // And Load The Texture

}

if (TextureImage != NULL) { // If It Loaded

success = TRUE;

// Typical Texture Generation Using Data From The Bitmap

glBindTexture(GL_TEXTURE_2D, *texPntr);

glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage->sizeX, TextureImage->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage->data);

glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);

glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);

}

if (TextureImage->data)

free(TextureImage->data);

return success;

}

Just adding the patch initialization here. You would do this whenever you create a patch. Again, this might be a cool place to use C++ (bezier class?).

int InitGL(GLvoid) // All Setup For OpenGL Goes Here

{

glEnable(GL_TEXTURE_2D); // Enable Texture Mapping

glShadeModel(GL_SMOOTH); // Enable Smooth Shading

glClearColor(0.05f, 0.05f, 0.05f, 0.5f); // Black Background

glClearDepth(1.0f); // Depth Buffer Setup

glEnable(GL_DEPTH_TEST); // Enables Depth Testing

glDepthFunc(GL_LEQUAL); // The Type Of Depth Testing To Do

glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Really Nice Perspective Calculations

initBezier(); // Initialize the Bezier's Control Grid ( NEW )

LoadGLTexture(&(mybezier.texture), "./Data/NeHe.bmp"); // Load The Texture ( NEW )

mybezier.dlBPatch = genBezier(mybezier, divs); // Generate The Patch ( NEW )

return TRUE; // Initialization Went OK

}

First call the bezier's display list. Then (if the outlines are on) draw the lines connecting the control points. You can toggle these by pressing SPACE.

int DrawGLScene(GLvoid) { // Here's Where We Do All The Drawing

int i, j;

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear Screen And Depth Buffer

glLoadIdentity(); // Reset The Current Modelview Matrix

glTranslatef(0.0f,0.0f,-4.0f); // Move Left 1.5 Units And Into The Screen 6.0

glRotatef(-75.0f,1.0f,0.0f,0.0f);

glRotatef(rotz,0.0f,0.0f,1.0f); // Rotate The Triangle On The Z-Axis

glCallList(mybezier.dlBPatch); // Call The Bezier's Display List

// This Need Only Be Updated When The Patch Changes

if (showCPoints) { // If Drawing The Grid Is Toggled On

glDisable(GL_TEXTURE_2D);

glColor3f(1.0f,0.0f,0.0f);

for(i=0;i<4;i++) { // Draw The Horizontal Lines

glBegin(GL_LINE_STRIP);

for(j=0;j<4;j++) glVertex3d(mybezier.anchors[i][j].x, mybezier.anchors[i][j].y, mybezier.anchors[i][j].z);

glEnd();

}

for(i=0;i<4;i++) { // Draw The Vertical Lines

glBegin(GL_LINE_STRIP);

for(j=0;j<4;j++) glVertex3d(mybezier.anchors[j][i].x, mybezier.anchors[j][i].y, mybezier.anchors[j][i].z);

glEnd();

}

glColor3f(1.0f,1.0f,1.0f);

glEnable(GL_TEXTURE_2D);

}

return TRUE; // Keep Going

}

This function contains some modified code to make your projects more compatable. It doesn't have anything to do with Bezier curves, but it does fix a problem with switching back the resolution after fullscreen mode with some video cards (including mine, a crappy old ATI Rage PRO, and a few others). I hope, you'll use this from now on so me and others with similar cards can view your cool examples GL code properly. To make these modifications make the changes in KillGLWindow(), make sure and define DMsaved, and make the one line change in CreateGLWindow() (it's marked).

GLvoid KillGLWindow(GLvoid) // Properly Kill The Window

{

if (fullscreen) // Are We In Fullscreen Mode?

{

if (!ChangeDisplaySettings(NULL,CDS_TEST)) { // If The Shortcut Doesn't Work ( NEW )

ChangeDisplaySettings(NULL,CDS_RESET); // Do It Anyway (To Get The Values Out Of The Registry) ( NEW )

ChangeDisplaySettings(&DMsaved,CDS_RESET); // Change It To The Saved Settings ( NEW )

} else {

ChangeDisplaySettings(NULL,CDS_RESET); // If It Works, Go Right Ahead ( NEW )

}

ShowCursor(TRUE); // Show Mouse Pointer

}

if (hRC) // Do We Have A Rendering Context?

{

if (!wglMakeCurrent(NULL,NULL)) // Are We Able To Release The DC And RC Contexts?

{

MessageBox(NULL,"Release Of DC And RC Failed.", "SHUTDOWN ERROR", MB_OK | MB_ICONINFORMATION);

}

if (!wglDeleteContext(hRC)) // Are We Able To Delete The RC?

{

MessageBox(NULL, "Release Rendering Context Failed.", "SHUTDOWN ERROR", MB_OK | MB_ICONINFORMATION);

}

hRC=NULL; // Set RC To NULL

}

if (hDC && !ReleaseDC(hWnd, hDC)) // Are We Able To Release The DC

{

MessageBox(NULL, "Release Device Context Failed.", "SHUTDOWN ERROR", MB_OK | MB_ICONINFORMATION);

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «NeHe's OpenGL Tutorials»

Представляем Вашему вниманию похожие книги на «NeHe's OpenGL Tutorials» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Jeff Jacobson - Sleep Tight
Jeff Jacobson
Jeff Salyards - Veil of the Deserters
Jeff Salyards
Jeff LaSala - The Darkwood Mask
Jeff LaSala
Jeff Lindsay - Dexter's Final Cut
Jeff Lindsay
libcat.ru: книга без обложки
Неизвестный Автор
libcat.ru: книга без обложки
Неизвестный Автор
libcat.ru: книга без обложки
Неизвестный Автор
libcat.ru: книга без обложки
Неизвестный Автор
Отзывы о книге «NeHe's OpenGL Tutorials»

Обсуждение, отзывы о книге «NeHe's OpenGL Tutorials» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x