Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 3D-программирование

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 12.08.2011, 22:39   #211
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Имитация водной поверхности.

Шейдер теней.
1. Делаем рендер с камеры стоящей в позиции света и ориентированной по направлению света. Результатом должна стать текстура, в которой цветом будет записано расстояние от видимых пикселей до источника света. Допустим красный+зеленый кодируют целую часть, а голубой дробную.
2. Далее рендрим сцену с обычной позиции камеры. Вершинный шейдер передает в пиксельный позиции и текстурные координаты вершин. Все тени в пиксельном шейдере. Передаем в шейдер позицию источника света и текстуру из п.1. Далее используя матрицу проекции для той камеры, что стоит в позиции источника света узнаю, верхний ли этот пиксель или нет, если нет, значит он в тени, значит надо совершить затенение, что само по себе тривиальная задача. И тут появляется возможность супер-дюпер манипулирования параметрами тени, хошь тени как на луне, хошь святящиеся. В итоге должно получиться само затенение.
Все это можно объединить в одном шейдере с двумя проходами. Первый проход создание текстуры глубины сцены с позиции света. Камеру создавать не нужно, а на основании позиции света можно замутить матрицу проекции для камеры как бы существующей в этом месте.
Для отсутствия швов карту глубины можно сделать кубомапой.

Хотя бы в общих чертах я прав?
(Offline)
 
Ответить с цитированием
Старый 12.08.2011, 23:27   #212
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Имитация водной поверхности.

Допустим красный+зеленый кодируют целую часть, а голубой дробную.
можно просто использовать флоатовую одноканальную текстуру (R32F).
текстурные координаты вершин
они тут причём?
в VS считаешь просто помимо обычной позиции, позицию, полученную переменожением на шадоумап-матрицу. шадоумап-матрица = world * lightView * lightProj. потом эту матрицу, либо результат перемножения надо перевести в 0-1 диапазон, чтобы использовать как текстурные координаты для карты глубины. удобнее изначально шадоумап-матрицу умножить на скейлящую в нужный диапазон матрицу.
Для отсутствия швов карту глубины можно сделать кубомапой.
??? для точечных лайтов так делают, для направленного источника не нужно.
Камеру создавать не нужно
ну камера в ксорсе тебе бесплатно может предоставить view и proj матрицы не нагружая рендер. так что нет смысла самому конструировать.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
dsd (12.08.2011)
Старый 12.08.2011, 23:53   #213
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Имитация водной поверхности.

Вообще протупил, не нужны они, но в принципе, можно сделать как бы светящиеся участки мешей в зависимости от цвета наложенной текстуры.
(Offline)
 
Ответить с цитированием
Старый 13.08.2011, 14:39   #214
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Имитация водной поверхности.

char fps;
xText (10,20,fps=xGetFPS());

выдает:
\init.cpp|23|error: initializing argument 3 of 'void xText(int, int, const char*, int, int)'|
Это типа я этой командой могу только константы печатать? O_o
(Offline)
 
Ответить с цитированием
Старый 13.08.2011, 14:50   #215
Nex
Гигант индустрии
 
Аватар для Nex
 
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений
(для 3,298 пользователей)
Ответ: Имитация водной поверхности.

так?
xText (10,20,"fps"+xGetFPS());
(Offline)
 
Ответить с цитированием
Старый 13.08.2011, 14:54   #216
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Имитация водной поверхности.

так запускает, секунду печатает fps, потом ничего не печатает
(Offline)
 
Ответить с цитированием
Старый 13.08.2011, 14:56   #217
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Имитация водной поверхности.

char содержит 1 символ (1 байт). для строк используй std::string.

#include <string>
using namespace std;
...
чтобы конвертировать число в стринг, придётся написать отдельную функцию:
string itoa( int n )
{
char buff[32];
sprintf(buff,"%d",n);
return string( buff );
}
...
xText (10,20, (string("fps: ") + itoa(xGetFPS())).c_str() );

необязательно так париться каждый раз - можно расширить стринг, дабы он мог нормально складываться с циферками.
а вообще тебе стоит читать книжки по с++ )

---
исправил ошибочку
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
dsd (13.08.2011)
Старый 13.08.2011, 14:59   #218
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Имитация водной поверхности.

Так и читаю.

Щас вроде в башке устаканивается отличие и структура условий, циклов. Вроде ниче такой язык программирования
(Offline)
 
Ответить с цитированием
Старый 13.08.2011, 16:55   #219
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Имитация водной поверхности.

Вроде ниче такой язык программирования
да. мировое сообщество программистов с тобой солидарно
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо HolyDel за это полезное сообщение:
Hurrit (14.08.2011), moka (13.08.2011), Nex (13.08.2011)
Старый 13.08.2011, 18:47   #220
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Имитация водной поверхности.

Небольшой код для C++ и Xors3D, с вращающимся тором и перемещением камеры. Для Code::Blocks 10.05

#include <iostream>
#include "xors3d.h"
//#include <string>
#include <cmath>


using namespace std;


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
   xAppTitle( "Basic start" );
   xGraphics3D( 640,480,false,false,true );

   void Control(double speed, double mousesensitivity, Handle Camera, Handle Pivot);
    Handle Cube = xCreateTorus(16,4,1);
    Handle Pivot = xCreatePivot();
    Handle Camera = xCreateCamera(Pivot);
    Handle Light = xCreateLight(LIGHT_DIRECTIONAL);


        xTurnEntity(Light, 30.0, 30.0, 0.0);
        xMoveEntity(Cube, 0.0, 0.0, 10.0);

   while (xWinMessage("WM_CLOSE")==0 && xKeyHit(KEY_ESCAPE)==false)
   {
        xTurnEntity(Cube, 1.0, 1.0, 1.0);
        xMoveEntity(Cube,0,0.2*sin(xMillisecs()/1000),0);
      xRenderWorld();
        Control(1,1,Camera,Pivot);
      xFlip();
   }
   return 0;
}



void Control(double speed, double mousesensitivity, Handle Camera, Handle Pivot) {
    double mxs;
    double mys;
      if (xKeyDown(2)) xWireframe(true);
      if (not xKeyDown(2)) xWireframe(false);
      xText (10,10,"i'm still not able to use properly this function, so it's reason why this have an console output :)");
      if (xKeyHit(57))  {cout<<"FPS is "<<xGetFPS(); cout<<", time is "<<xMillisecs()<<"\n";  };
        mxs+=xMouseXSpeed()/5.0;
        mys+=xMouseYSpeed()/5.0;
        if (xKeyHit(3)) {cout<<mxs<<"   "<<mys<<"\n";};
        xTurnEntity (Camera,mousesensitivity*mys,-mousesensitivity*mxs,0);
        xMoveMouse (xGraphicsWidth()/2,xGraphicsHeight()/2);
        if (xKeyDown(17) || xKeyDown(200)) xMoveEntity (Camera,0,0,speed);
        if (xKeyDown(31) || xKeyDown(208)) xMoveEntity (Camera,0,0,-speed);
        if (xKeyDown(30) || xKeyDown(203)) xMoveEntity (Camera,-speed,0,0);
        if (xKeyDown(32) || xKeyDown(205)) xMoveEntity (Camera,speed,0,0);
        xPositionEntity (Pivot,xEntityX(Camera,1),xEntityY(Camera,1),xEntityZ(Camera,1));
        xPositionEntity (Camera,0,0,0);
}
Ибо в гугле на русском языке этого нет, но пусть будет.

Последний раз редактировалось dsd, 23.10.2011 в 22:19.
(Offline)
 
Ответить с цитированием
Старый 13.08.2011, 18:54   #221
NitE
злобный флудер
 
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений
(для 1,476 пользователей)
Ответ: Имитация водной поверхности.

dsd, не думал блог завести ?
(Offline)
 
Ответить с цитированием
Старый 13.08.2011, 19:00   #222
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Имитация водной поверхности.

С названием: Быдлокод для хорса?
(Offline)
 
Ответить с цитированием
Старый 13.08.2011, 19:02   #223
NitE
злобный флудер
 
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений
(для 1,476 пользователей)
Ответ: Имитация водной поверхности.

С любым названием.
(Offline)
 
Ответить с цитированием
Старый 13.08.2011, 19:05   #224
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Имитация водной поверхности.

Зачем? Кто его будет читать? и указывать на самые тупые места моего кода?
(Offline)
 
Ответить с цитированием
Старый 13.08.2011, 19:20   #225
NitE
злобный флудер
 
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений
(для 1,476 пользователей)
Ответ: Имитация водной поверхности.

Теже люди которые читают то что ты здесь выкладываешь, наверное.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 10:48.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com