Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Наложение текстур OpenGL


Автор: DKey 4.1.2007, 23:03
Здрасте ещё раз! Извените за "флуд")... 

А как наложить текстуру на какой-то обьект так что-бы функций было поменьше, всё было понятно и меньше задавать всяких параметров? Если можно, напишите пример... 3@ p@HHee cn@ci60...

Автор: maksr 4.1.2007, 23:11
http://pmg.org.ru/nehe/index.html - возможно это тебе поможет.  smile 

Автор: DKey 4.1.2007, 23:27
Спасибо, почитаю!) smile 

Автор: AssassinFX 5.1.2007, 13:15
DKey, www.UltimategameProgramming.com
                    www.PaulsProjects.net
ЗЫ Юкрэйн - я тоже от туда smile 

Автор: DKey 5.1.2007, 17:20
AssassinFX, спасибо!

ЗЫ Надож - круто тебе! smile 

Автор: DKey 6.1.2007, 15:45
 smile  smile  smile Напишите пожалуста готовый исходник примитивной программы типа 2d - квадрат с текстурой... please  smile 

Автор: AssassinFX 9.1.2007, 01:20
DKey,А чем тебя неустроил пример с сайта www.UltimategameProgramming.com,ты спрашивай нестисняйся  smile 

Автор: DKey 12.1.2007, 00:23
AssassinFX, Просто хотелось-бы без использования библиотек glaux и windows... Они у мя некомпиляться smile  smile  smile 

Автор: AssassinFX 12.1.2007, 10:52
DKey, А что у тебя за компил?
А счего ты взял что здесь используется глаукс или вин?
Код

#ifndef CTGALOADER_H
#define CTGALOADER_H

#include<stdio.h>


class CTGALoader
{
   public:
      CTGALoader();
      ~CTGALoader();



      bool LoadTGA(char *file);
      void FreeImage();

      unsigned int ID;
      int imageWidth;
      int imageHeight;
      unsigned char *image;
      int type;
};

#endif


Код

#include"CTgaLoader.h"
#include<string.h>


CTGALoader::CTGALoader()
{
   // Give everything default values.
  image = 0;
  type = 0;
  ID = -1;
  imageWidth = 0;
  imageHeight = 0;
}


CTGALoader::~CTGALoader()
{
   FreeImage();
}


bool CTGALoader::LoadTGA(char* file)
{
   FILE *pfile;
   unsigned char tempColor;
   unsigned char bitCount;
   int colorMode;
   long tgaSize;
   unsigned char unCompressHeader[12] = {0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   unsigned char tgaHeader[12];
   unsigned char header[6];

   // Open the file.
   if(!file) return false;
   pfile = fopen(file, "rb");
   if(!pfile) return false;

   // Read the header.
   fread(tgaHeader, 1, sizeof(tgaHeader), pfile);

   // We only want to read uncompressed tga's.  Compare the header
   // with data that would be in a uncompressed header.
   if(memcmp(unCompressHeader, tgaHeader, sizeof(unCompressHeader)) != 0)
       {
           fclose(pfile);
           return false;
       }

   // Read image info.
   fread(header, 1, sizeof(header), pfile);

   // Calculate and save the width and height.
   imageWidth = header[1] * 256 + header[0];
   imageHeight = header[3] * 256 + header[2];

   bitCount = header[4];

   // calculate the color mode and image size.
   colorMode = bitCount / 8;
   tgaSize = imageWidth * imageHeight * colorMode;

   // Allocate data for the image and load it.
   image = new unsigned char[sizeof(unsigned char) * tgaSize];
   fread(image, sizeof(unsigned char), tgaSize, pfile);

   // Convert from BGR to RGB format.
   for(long index = 0; index < tgaSize; index += colorMode)
       {
           tempColor = image[index];
           image[index] = image[index + 2];
           image[index + 2] = tempColor;
       }

   fclose(pfile);

   if(colorMode == 3) type = 3;
   else type = 4;

   return true;
}


void CTGALoader::FreeImage()
{
   // When the application is done delete all memory.
   if(image)
      {
         delete[] image;
         image = NULL;
      }
}


Автор: DKey 12.1.2007, 19:42
У меня Dev C++, код неработает... просто некомпилит smile 

Автор: AssassinFX 12.1.2007, 20:17
DKey, Всмысле некомпилит? smile Поподробнее.Ошибки какие то или что?

Автор: DKey 13.1.2007, 21:35
AssassinFX, Оно нормально компилит просто, компилит в dll smile ... а хоцца exe.. Я с dll ниразу неработал smile 

Автор: AssassinFX 14.1.2007, 13:31
DKey,Не чуди,это как так компилит в dll  smile просто так компилятор в dll компилить небудет,он будет компилить только с твоей подачки(например указал в параметрах проекта сборку в dll).

Автор: DKey 14.1.2007, 15:24
AssassinFX, ща воообще перстал компилить, пишет:

In constructor `CTGALoader::CTGALoader()': 
[Warning] converting of negative value `-0x000000001' to `unsigned int' 
[Linker error] undefined reference to `WinMain@16' 
ld returned 1 exit status 
[Build Error]  [1.exe] Error 1 


Буду искать другую среду...

Автор: AssassinFX 14.1.2007, 17:22
DKey, Маленький экскурс в создание проектов Dev-C++ smile 
Файл->Создать->Проект->Windows Application
Потом слева есть такая штука ПРОЕКТ(там где обзор файлов проекта,там ещё твоё название проекта)так вот нажимаем правой кнопкой по названию проекта и выбираем "Добавить к проекту",кстати перед этим надо положить файлы CTGALoader.cpp/h в папку с проектом,и добовляем эти файлы к проекту,значит дальше переходим в файл main.cpp и пишем include "CTGALoader.h" потом юзаем класс,всё.
Цитата

[Linker error] undefined reference to `WinMain@16' 
Код




Ошибка из за отсутсвия точки входа в программу,вслучаи с Windows Application это 
Код

WINAPI WinMain

Еслиб это было Console App то в таком случаи точка входа была б main.
Значит как я запихиваю функции в dll во первых для облегчения делаю следующие
Код

#ifdef HORIZON_EXPORTS
#define HORIZON_API __declspec(dllexport)
#else
#define HORIZON_API __declspec(dllimport)
#endif

естевственно нужно создать DLL проект
теперь выписка из движка HORIZON, © Blinov Andrey
Код

//.H File
#include "types.h"//здесь находится #ifdef HORIZON_EXPORTS и тд.
HORIZON_API class CD3DDevice:public INullDevice
{
public:
    HORIZON_API CD3DDevice(void);
public:
    HORIZON_API ~CD3DDevice(void);
public:
    HORIZON_API void CreateDevice(core::CSystem* window);

};
//.CPP File
HORIZON_API CD3DDevice:: CD3DDevice(void)
{
}

HORIZON_API CD3DDevice:: ~CD3DDevice(void)
{
}
HORIZON_API void CD3DDevice::CreateDevice(core::CSystem* window)
{
    
}

До невозможности упростил класс 8)
Значит потом в приложении в котором хотим заюзать эту длл пишем 
#include "horizon.h"//тут подключаются все .h файлы движка
#pragma comment(lib,"horizon.lib")//линкуем длл
Это всё ИМХО мне просто так удобно это делать 8)




Автор: DKey 14.1.2007, 17:58
AssassinFX, Спасибу, буду эксперементировать!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)