NVIDIA GeForce FX 5500 :)
А может можно что то другое придумать? графики через чур много :) да и в коде неразобраться будет из за этого :)
DarkWraith
>
> А может можно что то другое придумать? графики через чур много :) да и в коде
> неразобраться будет из за этого :)
Размер текстур обязан быть степенью двойки.
Это не обсуждается.
Если не устраивает - забудь об аппаратном ускорении, только софтверный рендеринг.
DarkWraith
> А может можно что то другое придумать? графики через чур много :)
Можно и другое. Можно юзать ARB_texture_rectangle.
Только сразу забывай про мипмаппинг, GL_REPEAT враппинг, и про нормализованные текстурные координаты.
Я вообщем пойду отредактирую TGA Loader так, чтоб он при загрузке их округлял до степени двойки прозрачными пикселами :)
Помогите пожалуйсто мне снова :) функцию изменения размеров написал, теперь картинка автоматом при загрузке делается размерами кратным двойке :).
Но возникла проблемка. Как мне наложить эту текстуру? у меня есть текстура 283х68, после загрузки она становится 512х128, и теперь когда я её накладоваю в квад размерами 283х68 она ужимается под его размеры, что сделать чтоб картинка не ужималась, а просто та часть что не влезает игнорировалась?
Код своей функции меняющей размеры могу дать, если вдруг кому нужно :)
DarkWraith
Для начала реши, будет это строго 2D без значительного масштабирования спрайтов, или таки потом захочется 3D.
Глядя на твои последние вопросы и, главное, на код, приходишь к выводу, что ARB_texture_rectangle подойдет идеально. Ты всё-равно хранишь размеры картинки в классе block_list, так что ненормализованные текстурные координаты тебе не помеха.
Ну я делаю игру танчики как на денди :), Ничего особенного не будет, а опыт с 3D у меня уже есть :) так что на 3D не уйду с этой игрой. Тут только 2D, на кадр максимум 2000 спрайтов :D Что мне кажется многовато. А ответ на вопрос как сделать чтоб текстура не расстягивалась а обрезалась можно? :)
DarkWraith
1. Убери растягивание из загрузчика картинок.
2. Бинди текстуры не к GL_TEXTURE_2D а к GL_TEXTURE_RECTANGLE_ARB
3. Соответственно glEnable/glDisable не GL_TEXTURE_2D, a GL_TEXTURE_RECTANGLE_ARB
4. Текстурные координаты не glTexCoord2f(0 .. 1, 0 .. 1), а glTexCoord2i (0 .. img_witdh, 0 .. img_height)
И вся разница.
[BCC32 Error] tga.h(311): E2451 Undefined symbol 'GL_TEXTURE_RECTANGLE_ARB'
Full parser context
main.cpp(7): #include include\tga.h
tga.h(307): parsing: bool LoadTexture(char *,unsigned int)
В загрузчике данных вызываешь функции GL?
Где соответствующие инклуды? gl.h, glext.h?
всмысле? ты же вроде видал код :)
ничего о glext.h не слышал :)
[BCC32 Error] main.cpp(6): E2209 Unable to open include file 'gl\glext.h'
У меня всего 3 файла для opengl: gl.h, glaux.h, glu.h;
Два из них подключенно, а именно: gl.h, glu.h;
В загрузчике текстуры вызываю :-)
bool LoadTexture( char *TexName, GLuint TexHandle ){
TGAImg Img;
if( Img.Load( TexName ) != IMG_OK ) return false;
glBindTexture( GL_TEXTURE_2D, TexHandle );
Img.FixSize();
if( Img.GetBPP() == 24) glTexImage2D( GL_TEXTURE_2D, 0, 3, Img.GetWidth(), Img.GetHeight(), 0, GL_RGB, GL_UNSIGNED_BYTE, Img.GetImg() );
else if( Img.GetBPP() == 32 ) glTexImage2D( GL_TEXTURE_2D, 0, 4, Img.GetWidth(), Img.GetHeight(), 0 , GL_RGBA, GL_UNSIGNED_BYTE, Img.GetImg() );
else return false;
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT );
return true;
}
Да кстати, вы неподскажите, я вот думаю и никак не пойму, зачем делать копию unsigned int и называть её GLuint, это ведь глупо? зачем это делается? ради прикола? эх, я их не понимаю :)
DarkWraith
> всмысле? ты же вроде видал код :)
Потому и навожу на мысль. У тебя в tga.h лежит код, использующий функционал GL. При этом в самом tga.h нет #include <GL/gl.h>. Из-за этого компиляция сломается, если где-то в другом cpp файле tga.h будет включен раньше, чем gl.h
>ничего о glext.h не слышал :)
http://www.opengl.org/registry/#headers
http://www.opengl.org/registry/api/glext.h
http://www.opengl.org/registry/api/wglext.h
Лучше скажи что делать, инклуда OpenGl не нужна, т.к. она в любом случае раньше за инклюдилась :) main.cpp там сначало gl а потом tga :) что делать?
#include <windows.h>
#include <time.h>
#include <stdio.h>
#include <gl\gl.h>
#include <gl\glu.h>
#include <gl\glaux.h>
#pragma hdrstop
#include "include\tga.h"
#include "header.hpp"
#include "game.cpp"
#pragma comment (lib , "opengl32.lib")
#pragma comment (lib , "glu32.lib")
DarkWraith
> #include <gl\gl.h>
> #include <gl\glu.h>
> #include <gl\glaux.h>
+
#include <gl\glext.h>
Тема в архиве.