forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Имитация водной поверхности. (http://forum.boolean.name/showthread.php?t=15000)

dsd 14.08.2011 18:49

Ответ: Имитация водной поверхности.
 
Класс, написанно явно для дебилов! То что надо:super:

dsd 14.08.2011 23:24

Ответ: Имитация водной поверхности.
 


Супер функция, попозже сделаю поверхность на вид сплошной и на все вертексы.

Код:

Handle CreateSpring(double torrad, double inrad,int elements,int segments,int vitki,double shagvitka){


Handle mesh=xCreateMesh();
Handle meshsurf=xCreateSurface(mesh);
int i,h,x;
double x1,y1,z1;
//vertex creation
    for (i=0;i<=(vitki*elements);i++){
        for (h=0;h<=segments;h++){
            double deg1,deg2;
            //перевод в радианы
            /*
            1градус=3,1417/180
            */
            deg1=i*6.2834/elements;
            deg2=h*6.2834/segments;
            x1=torrad*sin(deg1)+inrad*cos(deg2)*sin(deg1);
            y1=torrad*cos(deg1)+inrad*cos(deg2)*cos(deg1);
            z1=inrad*sin(deg2)+shagvitka*i/elements;
                xAddVertex (meshsurf,x1,y1,z1,inrad*h/segments,inrad*i/elements);
            };
        };
int v0,v1,v2,v3;
int qvert = xCountVertices(meshsurf)-1;
  for (x=0;x<=(vitki*elements);x++){
        for (i=0;i<=segments;i++){
            v0=i+segments*x;
            v1=v0+1;
            v2=v0+segments;
            v3=v2+1;
            if (v3<=qvert) {
                xAddTriangle (meshsurf,v2,v0,v3);
                xAddTriangle (meshsurf,v0,v1,v3);
            };
        };
    };

xUpdateNormals (mesh);
return mesh;
};

P.s. Посоветуйте математическую либу. Щоб там оперции с векторами были, штоб много математики разной. И либу, которая синусы косинусы резко считает, пусть и с погрешностью.

предлагать решать sin(x)=x-x^3/3!+x^5/5!-x^7/7!... до полного самоудвлетворения не надо :)
http://alglib.sources.ru/?

Mr_F_ 15.08.2011 00:36

Ответ: Имитация водной поверхности.
 
Цитата:

P.s. Посоветуйте математическую либу. Щоб там оперции с векторами были, штоб много математики разной. И либу, которая синусы косинусы резко считает, пусть и с погрешностью.
минимум (типа синусов) есть, если заинклудишь <cmath>

dsd 15.08.2011 00:51

Ответ: Имитация водной поверхности.
 
Я это знаю. И наличие в теле функции нескольких синусов и косинусов, какбэ намекает на это :)

Mr_F_ 15.08.2011 01:00

Ответ: Имитация водной поверхности.
 
ну попробуй для остального тогда поюзать XNA математику.
поставляется вместе в directx sdk

HolyDel 15.08.2011 22:43

Ответ: Имитация водной поверхности.
 
Код:

void sincos(float a, float &s, float &c)
{
  _asm
  {
    fld a
    fsincos
    fstp dword ptr [c]
    fstp dword ptr [s]
  }
}

использовать так:
Код:

float sinx, cosx;
sincos(angle,sinx,cosx);

работает быстрее, чем если считать синус и косуинус по раздельности.

dsd 15.08.2011 22:58

Ответ: Имитация водной поверхности.
 
А как значение разделяются? В смысле присваиваются?
Осознал как :)

Кстати
Цитата:

IV. Current futeres:
Второе слово помоему пишется несколько иначе :) features вроде.

dsd 16.08.2011 13:50

Ответ: Имитация водной поверхности.
 
Оффтоп:

Вчера на опте прикол был :)

Стою в общем в очереди. Продавцы армяне женщина и мужик. Мужик такой: 1,80, 90 кг, вены даже на сиськах торчат. У них ажиотажный спрос, очередь. Тут приходит еще один мужик, протягивает продавцу пачку тысячных и намекает, что какбэ не плохо уже забрать товар. Армян тихо так отвечает , что щас сбегает на склад и заявка будет готова, ну и срывается в галоп, прихватив пачку бабок. Покупатель кричит че-то в след на родном языке, продавец чето орет в ответ и увеличивает скорость километров этак до 30 в час. И тут за армяном срываются два мимо проходивших 20 летних пионера : D. И попытались они восстановить справедливость :) И выхватили они не только от армяна, но еще и от охраны.

dsd 16.08.2011 20:25

Ответ: Имитация водной поверхности.
 
Цитата:

char console[256];
sprintf_s(console, 256, "fps: %d", xGetFPS());
xText (10, 20, console);
В виду того, что я делаю это в кодеблокс, а оно использует линуксячий компилятор.

То не смотря на эту строку в самом начале:#include <stdio.h>
Оно мне пишет:
"error: 'sprintf_s' was not declared in this scope|"

А при sprintf(console, 256, "fps: %d", xGetFPS());

error: invalid conversion from 'int' to 'const char*'
и
error: initializing argument 2 of 'int sprintf(char*, const char*, ...)'|

в виде
Цитата:

char console[256];
sprintf(console, "%d", xGetFPS());
xText (10, 30, console);
Работает, так можно или это плохо? а "%d" обозначает добавить к строке?


Мой перевод в аргб, тупо работает :)
Цитата:

int ARGB(int a,int r,int b, int g){
int colora=(a<<24)+(r<<16)+(b<<8)+g;
return colora;
};
xWritePixel (100,100,ARGB(255,255,0, 0));

moka 16.08.2011 22:50

Ответ: Имитация водной поверхности.
 
Изучи Bitwise Operators, для смещения по битам при сложении чисел, а то эти умножения на 16777216 или 65536, просто ужасны..

dsd 16.08.2011 23:16

Ответ: Имитация водной поверхности.
 
okey



Цитата:

BBDECL void BBCALL xCreateDSS ( int width,
int height
)

Creates a depth-stencil surface.

Depth-stencil surface is used for z-buffer technique. It's used to write the scene depth for clipping invisible pixels. By default DSS is used with backbuffer dimensions, but if you want to render to larger textures you must create DSS with an appropriate dimensions. E.g. if you use 800x600 mode, default DSS will be 800x600 too. If you want to render to 1024x1024 texture (e.g. for shadows), you must call xCreateDSS(1024, 1024) to make things work.

Parameters:
width Depth-stencil surface width
height Depth-stencil surface height
Захотелось мне нарисовать вершины на мешах, а те из них которые не видимы, что бы не рисовать. И захотелось мне читать для каждого пикселя его з-буффер. Как?


Какая интересная функция :)
Цитата:

BBDECL void BBCALL xSetRenderWindow ( HWND window )

Sets the window for rendering.

It may be used by map editor or other tools to render into some gadgets.

Parameters:
window Pointer to rendering window

HolyDel 16.08.2011 23:42

Ответ: Имитация водной поверхности.
 
по принтам:

http://ru.wikipedia.org/wiki/Printf

dsd 17.08.2011 17:41

Ответ: Имитация водной поверхности.
 
xProjectedZ() Нужно только для вывода значения от команды xCameraProject2D ()?

При xCameraProject() туда тоже пишется какоето значение чуть меньшее 1 если точка перед камерой. Что это за значение?
Средствами хорса я вообще могу получить данные из буфера глубины?

Mr_F_ 17.08.2011 17:48

Ответ: Имитация водной поверхности.
 
Цитата:

Средствами хорса я вообще могу получить данные из буфера глубины?
збуффер?
получить для обработки на ЦПУ? крайне не рекомендую это делать т.к. гонять збуфер из видеопамяти в оперативку будет офигительно снижать фпс.

dsd 17.08.2011 17:57

Ответ: Имитация водной поверхности.
 
Я просто хочу спроецировать позицию вертекса на экран и узнать видима ли эта вершина или нет. Если видима то в области рядом с полученными координатами нарисовать синий или красный квадратик и все :(.

Пока пришла идея сравнивать нормаль и вектор от точки до позиции камеры и рисовать если угол меньше равен 90. Но если в сюрфейсе есть изгиб то будут рисоваться и те вершины которые не видимы.


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot