www.demoscene.ruenglish version
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация   ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
twister или twisting bar
На страницу 1, 2, 3 ... 9, 10, 11  След.
 
Начать новую тему   Ответить на тему    Список форумов Demoscene.Ru -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
Tronix



Зарегистрирован: 02.11.2011
Сообщения: 72


СообщениеДобавлено: Чт Июл 26, 2012 17:27    Заголовок сообщения: twister или twisting bar Ответить с цитатой

Привет, если ли у кого свои сабжи на вменяемом языке программирования (си/паскаль) ? Хочется посмотреть алгос.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Tronix



Зарегистрирован: 02.11.2011
Сообщения: 72


СообщениеДобавлено: Чт Июл 26, 2012 20:33    Заголовок сообщения: Ответить с цитатой

Хорошо, конкретизирую: вот беру алгоритм в лоб с амижной борды:
Код:
    amp := 100;
    For y := 1 to 270 do
      Begin
        x1 :=Trunc(Sin((y/amp)+ang)*50)+140;
        x2 :=Trunc(Sin((y/amp)+ang+90)*50)+140;
        x3 :=Trunc(Sin((y/amp)+ang+90*2)*50)+140;
        x4 :=Trunc(Sin((y/amp)+ang+90*3)*50)+140;
        If x1 < x2 then
          Begin
            Image1.Canvas.Pen.Color := clWhite;
            Image1.Canvas.MoveTo(x1,y);
            Image1.Canvas.LineTo(x2,y);
          End;
        If x2 < x3 then
          Begin
            Image1.Canvas.Pen.Color := clRed;
            Image1.Canvas.MoveTo(x2,y);
            Image1.Canvas.LineTo(x3,y);
          End;
        If x3 < x4 then
          Begin
            Image1.Canvas.Pen.Color := clGreen;
            Image1.Canvas.MoveTo(x3,y);
            Image1.Canvas.LineTo(x4,y);
          End;
        If x4 < x1 then
          Begin
            Image1.Canvas.Pen.Color := clBlue;
            Image1.Canvas.MoveTo(x4,y);
            Image1.Canvas.LineTo(x1,y);
          End;
      End;
    ang := ang + 0.1;
    if ang = 360 then ang := 1;


Вижу такую картинку:


И вижу, что как-бы четвертая грань (синяя) на ней выводится всего в пару линий толщиной. Что я делаю не так?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Tronix



Зарегистрирован: 02.11.2011
Сообщения: 72


СообщениеДобавлено: Пт Июл 27, 2012 10:35    Заголовок сообщения: Ответить с цитатой

Сам себе не ответишь, никто не ответит Smile Забыл про перевод градусов в радианы.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
keen



Зарегистрирован: 24.07.2011
Сообщения: 108
Откуда: Kiev/Ukraine

СообщениеДобавлено: Пт Июл 27, 2012 14:07    Заголовок сообщения: Ответить с цитатой

Tronix писал(а):
Сам себе не ответишь, никто не ответит Smile Забыл про перевод градусов в радианы.


кульно... а можешь весь исходник показать?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Tronix



Зарегистрирован: 02.11.2011
Сообщения: 72


СообщениеДобавлено: Пт Июл 27, 2012 16:55    Заголовок сообщения: Ответить с цитатой

keen писал(а):
кульно... а можешь весь исходник показать?

Да я как-бы на дельфе то его уже похерил. Смысл в том, что надо переводить угол в радианы, типа того:
Код:
x1 :=Trunc(Sin(((y/amp)+ang)*deg2rad)*60)+160;

где rad2deg := pi/180.

Ну и ессно не в цикле всю эту хрень считать а построить табличку LUT.

Я кодил для платформы chip16: http://habrahabr.ru/post/146496/ на асме. Приложу конечно на всякий случай исходник на асме и скомпиленный в chip16 исполнимый файл. Можно скачать эмулятор http://code.google.com/p/refchip16/downloads/list и посмотреть на нем.

Вот исходник и .c16 файл: http://rghost.ru/39436571

Вернуться к началу
Посмотреть профиль Отправить личное сообщение
bi71



Зарегистрирован: 14.07.2012
Сообщения: 870


СообщениеДобавлено: Пт Июл 27, 2012 19:07    Заголовок сообщения: Ответить с цитатой

тема разжевана:
http://eab.abime.net/showthread.php?t=59865

жаль, про текстурирование мало написано.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Tronix



Зарегистрирован: 02.11.2011
Сообщения: 72


СообщениеДобавлено: Пн Июл 30, 2012 08:47    Заголовок сообщения: Ответить с цитатой

bi71 писал(а):
тема разжевана:
http://eab.abime.net/showthread.php?t=59865

жаль, про текстурирование мало написано.


Почему мало? Все расписано нормально и понятно. Я бы реализовал щаз на раз два, токма задачи такой нет. Вот больше интересно про воксельный сабж, это вот я бы с удовольствием посмотрел алгоритм.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
bi71



Зарегистрирован: 14.07.2012
Сообщения: 870


СообщениеДобавлено: Пн Июл 30, 2012 11:57    Заголовок сообщения: Ответить с цитатой

Tronix писал(а):
bi71 писал(а):
тема разжевана:
http://eab.abime.net/showthread.php?t=59865

жаль, про текстурирование мало написано.


Почему мало? Все расписано нормально и понятно. Я бы реализовал щаз на раз два, токма задачи такой нет. Вот больше интересно про воксельный сабж, это вот я бы с удовольствием посмотрел алгоритм.


не заметил. описание трудное, я темный Cool
воксельный алгоритм вроде бы упоминался, есть исходники. кажется, я ссылку приводил.
если это воксели, конечно..
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Tronix



Зарегистрирован: 02.11.2011
Сообщения: 72


СообщениеДобавлено: Пн Июл 30, 2012 20:40    Заголовок сообщения: Ответить с цитатой

bi71 писал(а):
не заметил. описание трудное, я темный Cool
воксельный алгоритм вроде бы упоминался, есть исходники. кажется, я ссылку приводил. если это воксели, конечно..


А чего не ясно в тектурирование-то? Давай подскажу, попробуем накодить в си для win ce. Там просто все. А где про воксили рассказывали? Я примерно конечно понимаю как, но до конца мысль не сформировывается.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
bi71



Зарегистрирован: 14.07.2012
Сообщения: 870


СообщениеДобавлено: Вт Июл 31, 2012 07:22    Заголовок сообщения: Ответить с цитатой

Tronix писал(а):
bi71 писал(а):
не заметил. описание трудное, я темный Cool
воксельный алгоритм вроде бы упоминался, есть исходники. кажется, я ссылку приводил. если это воксели, конечно..


А чего не ясно в тектурирование-то? Давай подскажу, попробуем накодить в си для win ce. Там просто все. А где про воксили рассказывали? Я примерно конечно понимаю как, но до конца мысль не сформировывается.

http://demoscene.ru/forum/viewtopic.php?p=6922#6922

файл dna_dsrc.zip, где исходник на асме, если не ошибаюсь с комментариями.

что мне неясно в текстурировании? да просто алгоритм, пока оставил на потом, вернусь когда-нибудь.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
BiTL
DOS lover


Зарегистрирован: 22.09.2007
Сообщения: 2938


СообщениеДобавлено: Ср Авг 01, 2012 15:39    Заголовок сообщения: Ответить с цитатой

В твистере текстурирование то простое. Нужен просто алгоритм текстурной прямой линии, самой элементарной, где y1 и y2 одинаковые.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Tronix



Зарегистрирован: 02.11.2011
Сообщения: 72


СообщениеДобавлено: Пт Авг 03, 2012 18:01    Заголовок сообщения: Ответить с цитатой

BiTL писал(а):
В твистере текстурирование то простое. Нужен просто алгоритм текстурной прямой линии, самой элементарной, где y1 и y2 одинаковые.


Имхо никакого алгоритма не нужно. Просто берешь точку в текущей позиции икса. Ща подпил конешно, так бы накодил, может потом. Там ваще делать нечего реально.

PS: Воксельные сорцы не понятны. Алгоритм бы узнать.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
BiTL
DOS lover


Зарегистрирован: 22.09.2007
Сообщения: 2938


СообщениеДобавлено: Пт Авг 03, 2012 19:55    Заголовок сообщения: Ответить с цитатой

Tronix писал(а):
BiTL писал(а):
В твистере текстурирование то простое. Нужен просто алгоритм текстурной прямой линии, самой элементарной, где y1 и y2 одинаковые.


Имхо никакого алгоритма не нужно. Просто берешь точку в текущей позиции икса.


Так не получишь текстурированные грани, а получишь херню, закрашенную статичным фоном. Подумай Smile Текстурированный отрезок должен "сжиматься" и "расширятся".
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
bi71



Зарегистрирован: 14.07.2012
Сообщения: 870


СообщениеДобавлено: Сб Авг 04, 2012 08:33    Заголовок сообщения: Ответить с цитатой

http://insolitdust.sourceforge.net/code.html

insolit dust выложила исходники олдскульных эффектов, пусть там и xor, но разобраться с Twister'ом можно.

что-то с Паскалем фигня получается, вот тогда и будут вопросы.

на dbfinteractive есть рабочий исходник для PureBasic:
Код:

; -------- small PB example by Mr.Vain/Secretly! aka Thorsten Will in 2007 --------
lScreenW = 640            ; Width
lScreenH = 480            ; Height
lScreenD = 32             ; Depth
lCenterX = lScreenW / 2
InitSprite()
OpenScreen( lScreenW, lScreenH, lScreenD, "Twist Experience by va!n")
; -------- Define Colors in an array --------
     Dim aColor (4,3)
    aColor(0,0) =         255 : aColor(0,1) =           0 : aColor(0,2) =           0
    aColor(1,0) =           0 : aColor(1,1) =           0 : aColor(1,2) =         255
    aColor(2,0) =           0 : aColor(2,1) =         255 : aColor(2,2) =           0
    aColor(3,0) =         255 : aColor(3,1) =         255 : aColor(3,2) =           0
    aColor(4,0) = aColor(0,0) : aColor(4,1) = aColor(0,1) : aColor(4,2) = aColor(0,2)
;-------- Define some Twist settings --------
     ascale.f = 3.14/180
     lTwistWidth = 100
     inc.f       =   1.0            ; drehungs start pos
     iinc.f      =   0.01           ; drehungs speed
     a.f         =   0.25
; -------- Mainloop --------
Repeat
  ClearScreen($0)
  StartDrawing(ScreenOutput())
      ; -------- Reset Values --------

      a   = 0
       inc = inc + iinc

     For y = 0 To lScreenH+Abs(inc)
            x1 = lTwistWidth * (4+Abs(inc))/4 * Sin(a*ascale)
            x2 = lTwistWidth * (4+Abs(inc))/4 * Cos(a*ascale)
            x1 = Abs(x1)
            x2 = Abs(x2)
            q = Int(a/90)
   If q & 1 <> 0
              Swap x1,x2        ;      t = x1 : x1 = x2 : x2 = t
       EndIf

       ow = lCenterX-((x1+x2)/2)
   LineXY (   ow, y,    ow+x1, y, RGB( aColor(q+1,0), aColor(q+1,1), aColor(q+1,2) ))
   LineXY (ow+x1, y, ow+x1+x2, y, RGB( aColor(q  ,0), aColor(q  ,1), aColor(q  ,2) ))
   a = a + inc /2

   If Int(a) <=   0 : a = a + 360 : EndIf
   If Int(a) >= 360 : a = a - 360 : EndIf
       Next
          If inc > 2 Or inc < -2 : iinc = -iinc : EndIf
   StopDrawing()
; -------- Lets the show start --------
    FlipBuffers();1)
  Delay(1)
Until GetAsyncKeyState_(#VK_ESCAPE)
End
; IDE Options = PureBasic 4.60 (Windows - x86)
; CursorPosition = 53
; EnableXP
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
bi71



Зарегистрирован: 14.07.2012
Сообщения: 870


СообщениеДобавлено: Сб Авг 04, 2012 11:26    Заголовок сообщения: Ответить с цитатой

еще один интересный вариант, спасибо вахтеру Shockwave:
Код:

'
' Mister Twister Code Started 19:24pm 28/06/09 Finished 20:10 28/06/09
' Fast code, be kind :-) I know it's ugly :-p
' By Shockwave.
'
'===============================================================================

    #INCLUDE "TINYPTC_EXT.BI"
    #INCLUDE "WINDOWS.BI"

'-------------------------------------------------------------------------------   
'   SCREEN SETUP;   
'-------------------------------------------------------------------------------

    CONST   XRES    =    800
    CONST   YRES    =    600
   
    DIM SHARED AS INTEGER HALFX   
    DIM SHARED AS INTEGER HALFY
   
    HALFX=XRES/2
   
    DIM SHARED AS DOUBLE RAD2DEG
    DIM SHARED AS DOUBLE RAD2DEG2
    RAD2DEG =3.14/180
    RAD2DEG2=3.14/180
'-------------------------------------------------------------------------------
'   SET UP THE SCREEN.
'-------------------------------------------------------------------------------

    DIM SHARED AS UINTEGER BUFFER        ( XRES * YRES ):        ' SCREEN BUFFER
   
    DECLARE SUB TWISTER()
    DECLARE SUB RENDERLINE(BYVAL YP AS INTEGER, BYVAL XP AS INTEGER, BYVAL SLICE AS INTEGER, BYVAL TC AS UINTEGER)
'-------------------------------------------------------------------------------
'   SET UP THE SCREEN.
'-------------------------------------------------------------------------------

    PTC_ALLOWCLOSE(0)   
    PTC_SETDIALOG(1,"WWW.DBFINTERACTIVE.COM"+CHR$(13)+"FULL SCREEN?",0,1)               
    IF (PTC_OPEN("Coded by Shockwave",XRES,YRES)=0) THEN
    END-1
    END IF   

'-------------------------------------------------------------------------------
'   MAIN LOOP
'-------------------------------------------------------------------------------
    DIM SHARED AS DOUBLE OLD,DELTA,ADDMOVE
    ADDMOVE=0.0
WHILE(GETASYNCKEYSTATE(VK_ESCAPE)<> -32767 and PTC_GETLEFTBUTTON=FALSE) 
    OLD=TIMER

    TWISTER()
    PTC_UPDATE@BUFFER(0)
    SLEEP 1
    ERASE BUFFER
    DELTA=(TIMER-OLD)*150
    ADDMOVE=ADDMOVE+DELTA
WEND
    EXITPROCESS(0)
END

SUB TWISTER()
   
DIM AS INTEGER Y,X1,X2,X3,X4,X5,X6,X7,X8
DIM AS INTEGER PNR
DIM AS DOUBLE COUNTER,SV,PULSE
COUNTER=ADDMOVE

FOR Y=0 TO YRES-1

    SV=149*SIN((Y-COUNTER)*(RAD2DEG*.3))
    PULSE=110+60*SIN((Y+COUNTER)*RAD2DEG2*.15)

    X1=HALFX+(PULSE*SIN((SV+COUNTER)*RAD2DEG))
    X2=HALFX+(PULSE*SIN((SV+COUNTER+45)*RAD2DEG))
    X3=HALFX+(PULSE*SIN((SV+COUNTER+90)*RAD2DEG))
    X4=HALFX+(PULSE*SIN((SV+COUNTER+135)*RAD2DEG))
    X5=HALFX+(PULSE*SIN((SV+COUNTER+180)*RAD2DEG))
    X6=HALFX+(PULSE*SIN((SV+COUNTER+215)*RAD2DEG))
    X7=HALFX+(PULSE*SIN((SV+COUNTER+260)*RAD2DEG))
    X8=HALFX+(PULSE*SIN((SV+COUNTER+295)*RAD2DEG))
   


    IF X2>X1 THEN
        SLICE=X2-X1
        RENDERLINE(Y,X1,SLICE,RGB(SLICE,SLICE*.5,SLICE*.2))
    END IF

    IF X3>X2 THEN
        SLICE=X3-X2
        RENDERLINE(Y,X2,SLICE,RGB(SLICE*.5,SLICE*.2,SLICE))
    END IF

    IF X4>X3 THEN
        SLICE=X4-X3
        RENDERLINE(Y,X3,SLICE,RGB(SLICE*.2,SLICE,SLICE*.5))
    END IF

    IF X5>X4 THEN
        SLICE=X5-X4
        RENDERLINE(Y,X4,SLICE,RGB(SLICE*.2,SLICE*.5,SLICE))
    END IF

    IF X6>X5 THEN
        SLICE=X6-X5
        RENDERLINE(Y,X5,SLICE,RGB(SLICE,SLICE*.5,SLICE*.2))
    END IF

    IF X7>X6 THEN
        SLICE=X7-X6
        RENDERLINE(Y,X6,SLICE,RGB(SLICE*.5,SLICE*.2,SLICE))
    END IF

    IF X8>X7 THEN
        SLICE=X8-X7
        RENDERLINE(Y,X7,SLICE,RGB(SLICE*.2,SLICE,SLICE*.5))
    END IF

    IF X1>X8 THEN
        SLICE=X1-X8
        RENDERLINE(Y,X8,SLICE,RGB(SLICE*.2,SLICE*.5,SLICE))
    END IF




    PNR+=XRES
    COUNTER-=.035
NEXT
END SUB



SUB RENDERLINE(BYVAL YP AS INTEGER, BYVAL XP AS INTEGER, BYVAL SLICE AS INTEGER, BYVAL TC AS UINTEGER)
DIM AS UINTEGER PTR PP
                    PP=@BUFFER((YP*XRES)+XP)
                    asm
                    mov eax,dword ptr[TC]
                    mov ecx, [slice]
                    mov edi, [PP]
                    rep stosd
                    end asm       
END SUB



интересно теперь с текстурой разобраться..
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Demoscene.Ru -> Программирование Часовой пояс: GMT + 3
На страницу 1, 2, 3 ... 9, 10, 11  След.
Страница 1 из 11

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах