Результаты поиска
| |
WXZRW | Дата: Среда, 16 Декабря 2009, 17:52 | Сообщение # 241 | Тема: Вид от третьего лица. |
Thousand faces conspiration
Сейчас нет на сайте
| Quote (TAPAKAH) а если я скажу что я знаю градус поворота, это сильно упростит формулу? Не упростит. Тета это и есть градус. А эн это ось. Образно говоря. Там все равно надо матрицу, неважно откуда она. Можно решить это через Axis Angle, можно кватернионом крутить. Здесь 3 базисных вектора, в этой формуле.
|
|
| |
WXZRW | Дата: Среда, 16 Декабря 2009, 17:40 | Сообщение # 242 | Тема: Хочу стать программистом с уклоном в игростроение |
Thousand faces conspiration
Сейчас нет на сайте
| Quote (Pesets) Лучше начинать с Паскаля или С (советую с Паскаля). Бейсик не советую - он не для программистов. Имхо лучше PHP или Perl (можно и Python) для начала. Тем более синтаксис больше на С++ похож. Quote (Pesets) . А потом (если возникнет надобность) уже учить чистый DX или GL. Да можно и сразу, это на самом деле проблема не АПИ или синтаксиса, это проблема алгебры/геометрии. Какой именно ЯП ли АПИ это дело второе. Quote (Pesets) Если в математике ни бум-бум, про "стать программистом" можно и не заикаться. Для программирования (игр, в частности) алгебру, геометрию, логику, матанализ знать как отче наш. Хотя бы элементарные основы. Абсолютно согласен.
|
|
| |
WXZRW | Дата: Среда, 16 Декабря 2009, 17:35 | Сообщение # 243 | Тема: Вид от третьего лица. |
Thousand faces conspiration
Сейчас нет на сайте
| Подробнее : найди матрицу поворота вокруг n по theta, вот формула. Дальше сам сделаешь. 
|
|
| |
WXZRW | Дата: Среда, 16 Декабря 2009, 17:22 | Сообщение # 244 | Тема: Вид от третьего лица. |
Thousand faces conspiration
Сейчас нет на сайте
| Вращение точки вокруг произвольной оси. http://inside.mines.edu/~gmurray/ArbitraryAxisRotation/ http://local.wasp.uwa.edu.au/~pbourke/geometry/rotate/
|
|
| |
WXZRW | Дата: Среда, 16 Декабря 2009, 14:07 | Сообщение # 245 | Тема: Лицензии на форматы файлов |
Thousand faces conspiration
Сейчас нет на сайте
| Quote (TLT) *.ogg и свободнее и мощнее. Проще его взять. Если надо именно сжатый формат тогда да... А так можно wav использовать или загонять RAW данные в свой формат напрямую. Quote (eClipse) Был также задан вопрос о LGPL, но он был благополучно проигнорирован Прочитай лицензию там должно быть написано... Используй переводчик если что. Хотя должны переводы в сети быть.
|
|
| |
WXZRW | Дата: Среда, 16 Декабря 2009, 14:03 | Сообщение # 246 | Тема: Можно совет? Не могу толком определиться. |
Thousand faces conspiration
Сейчас нет на сайте
| Quote (MaximSokol) Второй вариант - исходники какого-нибудь простого 3D - бильярда с открытыми реурсами. Третий вариант - что-нибудь, на чём можно быстро приступить именнок созданию игры, а не написанию ядра (у ПП оно мизерное, пара кнопок да физика шара). ЧТо-нибудь, с помощью чего я сделал бы бильярд. Если кто поможет, то я в долгу не останусь, обещаю. Полно бильярдов на флэше, возьми любой SWF и декомпилируй. Изучи и сделай по-своему. Вроде все.
|
|
| |
WXZRW | Дата: Понедельник, 14 Декабря 2009, 19:29 | Сообщение # 247 | Тема: Tutorial [EN/RU]: Загрузка текстур формата TGA, OpenGL |
Thousand faces conspiration
Сейчас нет на сайте
| Обновлен 14/12/2009 Исправлено : возвращение результата функцией get_tga_file, поскольку это тип unsigned int, то он не может быть меньше 0. Все как обычно, комментарии к коду на английском, обьяснение в статье на русском. Описания функций WINAPI или OpenGL, использованных в коде, смотрите в MSDN. Лицензия : Любая информация которая здесь предоставлена, может содержать те или иные неточности, код может не компилиться при некоторых условиях. Все что здесь есть, предоставлено мною без каких-либо гарантий и ответственности, и я не несу никакой ответственности за любой возможный ущерб, который может быть вызван использованием любой части данного поста, кода или информации в любом виде и при любых обстоятельствах. Туториал также не продвигает и не рекламирует ни один графический АПИ, ни один формат файла, ни что либо еще. Все форматы файлов и прочее имущество третьих лиц может быть использовано согласно закону. Все торговые марки принадлежат их владельцам. Примечание : туториал основан на данном туториале - http://gcup.ru/forum/62-1590-1. Новый код помечен тегами /* NEW */ и /* END */ Код : * Обьявим функции и переменные, т.е. функцию для загрузки данных перед пуском программы, функцию загрузки TGA файла и идентификатор текстуры. Code void load_data();
unsigned int get_tga_file(char* t_file);
unsigned int t_id; * Функция для загрузки данных при запуске программы. Здесь также можно настроить что-либо, вобщем сделать все то что надо сделать перед рендерингом. Мы загрузим нашу текстуру здесь. Поскольку функция загрузки TGA возвращает результат, ты подаем его в переменную t_id. Это идентификатор текстуры. Code void load_data() { t_id = get_tga_file("texture.tga");
// Report if error occured while loading TGA file, using t_id value
if(t_id == 0) { MessageBox(NULL,"Can't load texture",NULL,MB_OK); }
} * Теперь нам надо вызвать функцию загрузки данных. Мы делаем это в функции WinMain, начало функции для наглядности : Code int WINAPI WinMain(HINSTANCE inst,HINSTANCE prev_inst,LPSTR line,int show) { * Наш новый код внутри : Code /* NEW */
load_data();
/* END */ * Закрываем функцию Code return _process(w_handle); // return result back to, after it's handled by _process function } * Теперь рисуем квадрат и накладываем на него текстуру. Обьяснение нового кода - мы включаем 2Д текстурирование, проверяем верный ли идентификатор текстуры (0 или положительное число), и если да, то включаем текстуру через glBindTexture в которую мы подаем идентификатор текстуры. Далее, мы включаем цвет (белый) на тот случай если текстуру не удалось загрузить и мы не смогли ее включить. Вообще стоит включать текстуринг (в glEnable(....)) только если идентификатор текстуры правилен, но поскольку текстура только 1, мы не заботимся об этом в данном случае. Далее, мы рисуем квадрат, выбрав режим GL_QUADS, чтобы рисовать квадрат мы подаем 4 вершины (4 точки) квадрата в glVertex и также назначаем текстурные координаты для правильного наложения текстуры. Обратите внимание, точка отсчета текстурных координат разная для DirectX и OpenGL, у нас это левый нижний угол текстуры. Текстурные координаты могут быть на интервале от 0 до 1, пропорционально высоте и ширине текстуры. То есть, пространство текстурных координат приводится к величине высоты и ширины, например если высота = 256 пикселов, то масимальная текстурная координата = 1, тогда для задания координаты в позиции 128 пикселя текстурная координа равна 0.5, т.е. пропорционально, и так далее для любых высоты и ширины текстуры. Code void draw() { // Clear the screen and load identity matrix glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity();
// View transform // Variables : eye position (3 vars), view direction (3 vars), up vector (3 vars) // Explanations : eye position is point from we're looking at, view direction is point we are // looking at, and up vector describes our coordinate system, we set Y to be pointed to the up gluLookAt(0,0,2.5,0,0,0,0,1,0);
/* NEW */
// Depth test to grab info how far objects are located from glEnable(GL_DEPTH_TEST); // Enable 2D texturing glEnable(GL_TEXTURE_2D);
// Check is texture id valid if(t_id > 0) { glBindTexture(GL_TEXTURE_2D,t_id); }
// Start to draw quads glBegin(GL_QUADS); // Below we set up color for quad. We draw the quad by passing it's 4 vertices to GL glColor3ub(255,255,255);
glTexCoord2f(0.0, 1.0); glVertex3f(-1, 1, 0);
glTexCoord2f(0.0, 0.0); glVertex3f(-1, -1, 0);
glTexCoord2f(1.0, 0.0); glVertex3f(1, -1, 0);
glTexCoord2f(1.0, 1.0); glVertex3f(1, 1, 0); // After we 're done with drawing, we need to stop it. glEnd(); // And disable depth testing then glDisable(GL_DEPTH_TEST); glDisable(GL_TEXTURE_2D);
/* END */ } * Последний этап это загрузка самой текстуры. Для начала мы пытаемся открыть файл функцией fopen(...) и назначаем бинарный режим чтения. Если файл есть, мы продолжаем, либо если его нет, мы выходим и возвращаем ошибку в виде переменной равной -1. Если все ОК, мы читаем заголовок TGA файла, это 18 байт. Мы читаем весь заголовок в массив типа unsigned char размером на 18 элементов. Вообще можно читать заголовок частями, получая только нужные данные, но мы для простоты читаем все. Когда мы получили заголовок, мы определяем тип текстуры. Мы грузим только несжатый формат TGA, т.е. если параметр в 3 элементе заголовка равен 2, что значит тип RGB. Если это не так, тогда мы выходим и выдаем ошибку в виде переменной равной -2. Если все удачно, тогда мы находим высоту и ширину текстуры, используя данные из заголовка. Также мы находим количество каналов в текстуре и пишем это в переменную color. Чтобы найти количество каналов, мы берем предпоследний элемент заголовка и делим на 8. Этот элемент хранит в себе количество байт на пиксель текстуры, т.е. 8, 16, 24 или 32. Поделив этот параметр на 8, мы получим число каналов в текстуре, т.е. - R,RG,RGB,RGBA. Далее, нам надо ввыделить место под данные текстуры, т.е. нам нужен массив размером на width*height*channels элементов. Выделив память, мы читаем в этот массив всю текстуру, т.е. каждый ее пиксель. Для этого используем - fread(image,sizeof(unsigned char),size,_file);. После того как у нас есть текстура, возникают проблемы. Дело в том, что в файле TGA данные лежат в виде BGR, но нам надо RGB. Поэтому в цикле мы просто пересобираем массив как нам нужно, меняя элементы местами. Потом мы закрываем файл. Теперь когда все готово, мы должны создать текстуру в OpenGL, для этого - назначаем переменную для идентификатора текстуры и генерируем данный идентификатор используя функцию glGenTextures(1,&tex_id); после чего включаем эту текстуру подавая идентификатор в glBindTexture(GL_TEXTURE_2D,tex_id); . Мы также устанавливаем режим наложения текстур в glTexEnvi(...), указывая GL_REPLACE чтобы не допустить смешивания цвета текстуры с цветом в OpenGL. (т.е. тем который задан при помощи например glColor3f(...) или glColor3ub(...) и т.д.). Если же нужно смешивание, тогда нужно передать параметр GL_MODULATE в glTexEnvi(....). Далее мы настраиваем фильтрацию текстуры и способ ее наложения. После этого, мы проверяем сколько каналов доступно, если это не 3 или 4 канала (т.е. RGB/RGBA), то возвращаем ошибку в виде переменной -3. Если все прошло успешно, мы заливаем текстуру в OpenGL с помощью gluBuild2DMipmaps и возращаем идентификатор текстуры. Code unsigned int get_tga_file(char* t_file) { // Below variables to hold data we will need. FILE *_file;
long size;
int color; unsigned char header[18];
// Open texture file in RB mode (Read/Binary) _file = fopen(t_file, "rb");
// If unavailable, then return 0 if(!_file) { return 0; }
// Otherwise, get header from TGA fread(header,1,sizeof(header),_file);
// If not RGB image, return 0 if(header[2] != 2) { return 0;}
int width = header[13] * 256 + header[12]; int height = header[15] * 256 + header[14];
// Compute how many bits per texture pixel this TGA has available. // Convert this data to channels amount, e.g. 3 or 4 channels (RGB or RGBA) color = header[16] / 8;
// Get array size to hold image. We compute total amount of pixels, i.e. width * height, after that we // need to allocate space for each pixel, so we multiply previous result with bits per pixel variable size = width * height * color;
// After we know the size of image data array, we declare it unsigned char *image = new unsigned char[sizeof(unsigned char) * size];
// Read pixel data from image to our image array fread(image,sizeof(unsigned char),size,_file);
// TGA holds BGR data, but we want it to be RGB instead. So we need to swap channels. for(long i = 0; i < size; i += color) { unsigned char tmp = image[i];
image[i] = image[i+2];
image[i+2] = tmp; }
// Close file after done fclose(_file);
// Declare variable to hold texture ID unsigned int tex_id;
// Generate texture and return it's ID glGenTextures(1,&tex_id); // And bind it glBindTexture(GL_TEXTURE_2D,tex_id);
// We want only texture colors to operate with, i.e. no color mixing required // You can set GL_MODULATE though, to mix texture color with color you want. glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE);
// Set texture filtering glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); // Set texture mapping mode glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
// Select texture channels info using data we got from texture file. Shulda be 3 or 4 channels (RGB or RGBA) // Otherwise return 0 if(color == 3) { color = GL_RGB;} else if(color == 4) { color = GL_RGBA;} else { return 0;}
// Build mipmaps by passing data we collected above gluBuild2DMipmaps(GL_TEXTURE_2D,color,width,height,color,GL_UNSIGNED_BYTE,image);
// If everything is OK, return txeture ID then. return tex_id; }
Скриншот : Также выложены .cpp исходник и текстура в формате TGA, для компиляции в Visual C++ нужно создать проект типа Win32 Application.
|
|
| |
WXZRW | Дата: Среда, 09 Декабря 2009, 18:44 | Сообщение # 248 | Тема: Колония 3 |
Thousand faces conspiration
Сейчас нет на сайте
| Господа, обратите внимание на то, что автор темы, то есть Niro, был навсегда забанен по целому ряду причин, о чем мною указано в одном из постов на этой т странице. Это означает как минимум то, что писать ему что-либо бесполезно, так как он вам не ответит здесь. Поэтому а также во избежание флуда, тему закрываю. Надо было это сделать сразу, ну да ладно.
|
|
| |
WXZRW | Дата: Среда, 09 Декабря 2009, 14:39 | Сообщение # 249 | Тема: учителя в школах |
Thousand faces conspiration
Сейчас нет на сайте
| Quote (TrueIfrit) И как ты умудрился ее закончить??? huh Я тоже так хочу!)) Врачи могут помочь. Это те люди, которые могут освободить от многого. Возможно у тебя есть причины по здоровью, или же если врач хороший, тогда он их найдет.
|
|
| |
WXZRW | Дата: Среда, 09 Декабря 2009, 14:36 | Сообщение # 250 | Тема: Бан лог |
Thousand faces conspiration
Сейчас нет на сайте
| Пользователь Niro Бан навсегда за обсуждение действий администрации, за несогласие с решениями администрации. Учитывая также вчерашние нарушения, то есть рецидив. Впрочем, как и за наглость. Тема : http://gcup.ru/forum/9-3223-1
|
|
| |
WXZRW | Дата: Среда, 09 Декабря 2009, 14:32 | Сообщение # 251 | Тема: Колония 3 |
Thousand faces conspiration
Сейчас нет на сайте
| Quote (Niro) а сказать что вам нехватаит в прочих играх серии а делать мне баны Vinchensoo, это паскуДНА. Наглеть вздумал что ли? Устное предупреждение не помогло, ну это ничего. Бан навсегда за обсуждение действий администрации, за несогласие с решениями администрации. Учитывая также вчерашние нарушения, то есть рецидив.
|
|
| |
WXZRW | Дата: Среда, 09 Декабря 2009, 14:12 | Сообщение # 252 | Тема: учителя в школах |
Thousand faces conspiration
Сейчас нет на сайте
| Quote (Psycho) Эх, жаль что в нашей школе не преподавала такая училка... уж её уроки я бы вряд ли прогуливал Я бы прогуливал... училка она все равно училка.. I dislike all the teachers anyway. No matter how she looks like.
|
|
| |
WXZRW | Дата: Вторник, 08 Декабря 2009, 19:26 | Сообщение # 253 | Тема: учителя в школах |
Thousand faces conspiration
Сейчас нет на сайте
| Никаких не помню уже. Потому что было это довольно таки давно, да и ходил я в такие заведения как школа нечасто, или же вообще редко.
|
|
| |
WXZRW | Дата: Суббота, 05 Декабря 2009, 18:46 | Сообщение # 254 | Тема: Может попробовать изменить BB тег Code! |
Thousand faces conspiration
Сейчас нет на сайте
| Quote (Akyltist) и отписаться всех заинтересованных в подобном изменении. Было бы неплохо, одобряю.
|
|
| |
WXZRW | Дата: Суббота, 05 Декабря 2009, 14:55 | Сообщение # 255 | Тема: Подскажите, учить С++ дальше или взять конструктор |
Thousand faces conspiration
Сейчас нет на сайте
| Quote (Pesets) Хм, а коде у тебя не ААВВ генерится, его же кагбэ поворачивать нельзя, получается... Там центр и полдлины слайса генерится сейчас. Min и max надо вычислять., т.е. центр +- полдлины. Поворота нет, значит это AABB, я же не вершины генерирую, только центр.
|
|
| |
WXZRW | Дата: Суббота, 05 Декабря 2009, 14:03 | Сообщение # 256 | Тема: Подскажите, учить С++ дальше или взять конструктор |
Thousand faces conspiration
Сейчас нет на сайте
| Quote (Vinchensoo) То бишь считается, что координаты кубика известны? Над тож подумать smile Да тут все понятно, надо просто AABB генерировать, и все, дальше простой тест с точкой, если же вершины рандомно генерить тогда будет OOBB в таком случае потребуется перевести точку в локальное пространство OOBB и потом уже тестить... Короче вот код я вчера набросал, но сейчас нет времени пока что, я не доделал, потом вобщем : Code #include "stdafx.h" #include <iostream.h> #include <ctime>
#include <string>
using namespace std;
#define random_float(min,max) ((max - min) * rand()/(float)RAND_MAX + min)
struct vector { float x,y,z; };
struct box { vector center;
float slice_half_length; vector max; vector min; };
int main(int argc, char* argv[]) { srand((unsigned int)time(NULL));
box bb;
bb.center.x = random_float(1.0,10.0); bb.center.y = random_float(1.0,10.0); bb.center.z = random_float(1.0,10.0);
bb.slice_half_length = random_float(5,25);
/* cout << (float) bb.center.x << endl; cout << (float) bb.center.y << endl; cout << (float) bb.center.z << endl; cout << (float) bb.slice_half_length << endl;*/
return 0; } Min и max надо вычислять используя центр бокса и полдлины слайса, и все, потом генеришь точку и тестируешь... ps. Это на VC++ 6.0, как на других будет компилиться я хз.
|
|
| |
WXZRW | Дата: Суббота, 05 Декабря 2009, 00:36 | Сообщение # 257 | Тема: Подскажите, учить С++ дальше или взять конструктор |
Thousand faces conspiration
Сейчас нет на сайте
| karuy, Завтра ближе к вечеру или раньше как время будет, сегодня просто времени не было.
|
|
| |
WXZRW | Дата: Четверг, 03 Декабря 2009, 15:18 | Сообщение # 258 | Тема: Лицензии на форматы файлов |
Thousand faces conspiration
Сейчас нет на сайте
| Если что лучше отдельно тему создай насчет этого.
|
|
| |
WXZRW | Дата: Четверг, 03 Декабря 2009, 14:49 | Сообщение # 259 | Тема: Лицензии на форматы файлов |
Thousand faces conspiration
Сейчас нет на сайте
| Quote (eClipse) WXZRW, зачем изобретать велосипед? smile Я не гений программистской мысли, чтобы придумать какое-то ноу-хау в теории сжатия графического изображения cool Quote (TrueIfrit) Quote (WXZRW) Не проще ли свой формат разработать? Обучишь ассемблеру? Ну я не в том смысле чтобы полноценный формат разрабатывать со всеми наворотами... Просто загнать данные в бинарник и все. Можно даже без сжатия и оптимизаций, винты все равно большие сейчас, либо запаковать. Я не говорю альтернативу mp3 разрабатывать, не не не.... Т.е. у меня например модели в своем формате, если из 3ds переносить, то получается в несколько раз больше размером файл... зато без чужих форматов. Ну, я не стал тратить время на доработку, сделал по минимуму. Потом может доработаю. Или можно паковать.
|
|
| |
WXZRW | Дата: Четверг, 03 Декабря 2009, 14:22 | Сообщение # 260 | Тема: Лицензии на форматы файлов |
Thousand faces conspiration
Сейчас нет на сайте
| Зачем именно .tga или .mp3? Не проще ли свой формат разработать? Если игру смогли сделать, то почему формат не сможете?
|
|
| |
|