Originally posted by spaztica@Mar 18 2004, 01:05 AM
bu bölümde çeşitli teknikleri bilen arkadaşlardan bunları kolay anlaşılır şekilde anlatan, pseude-code ile örnekleyen yazılar bekliyoruz.
aklma gelen teknikler:
- plasma
- metaballs
- fire
- z clipping
- isometric engine
- jellyvectors
bu liste uzar gider zaten. bir yerlerden başlayalım, ha? yenilere de kolaylık olur sanki.[post=239]Quoted post[/post][/b]
Originally posted by spaztica@Mar 18 2004, 01:05 AM
bu bölümde çeşitli teknikleri bilen arkadaşlardan bunları kolay anlaşılır şekilde anlatan, pseude-code ile örnekleyen yazılar bekliyoruz.
aklma gelen teknikler:
- plasma
- metaballs
- fire
- z clipping
- isometric engine
- jellyvectors
bu liste uzar gider zaten. bir yerlerden başlayalım, ha? yenilere de kolaylık olur sanki.[post=239]Quoted post[/post][/b]
bmpinfo* ReadBitmap(char *filename)
{
FILE *fp;
BITMAPFILEHEADER fileheader;
BITMAPINFOHEADER infoheader;
int i;
unsigned char temp;
bmpinfo *bmp = (bmpinfo*)malloc(sizeof(bmpinfo));
fp = fopen(filename,"rb");
fread(&fileheader,sizeof(BITMAPFILEHEADER),1,fp);
fread(&infoheader,sizeof(BITMAPINFOHEADER),1,fp);
bmp->w = infoheader.biWidth;
bmp->h = infoheader.biHeight;
bmp->data = (unsigned char*)malloc(sizeof(unsigned char) * bmp->w * bmp->h * 3);
if(infoheader.biBitCount == 24)
fread(bmp->data,sizeof(unsigned char),bmp->w * bmp->h * 3,fp);
else return NULL;
// OpenGL icin düzeltme bmp BGR OpenGL RGB
for(i=0;i<bmp->w * bmp->h;i++)
{
temp = bmp->data[3*i];
bmp->data[3*i] = bmp->data[3*i + 2];
bmp->data[3*i + 2] = temp;
}
return bmp;
}
typedef struct _bmpInfo
{
unsigned short w,h;
unsigned char *data;
}bmpinfo;
void ShowBitmap(bmpinfo *bitmap,int posx,int posy)
{
glRasterPos2f(posx,posy);
glDrawPixels(bitmap->w ,bitmap->h,GL_RGB,GL_UNSIGNED_BYTE,bitmap->data);
}
Originally posted by skate@Apr 19 2005, 09:45 AM
Bu sitenin tutorial ya da tips&tricks bölümü açılsa da oraya yollasak keşke bu tür dökümanları...[post=1219]Quoted post[/post][/b]
Originally posted by spaztica@Mar 18 2004, 01:05 AM
bu bölümde çeşitli teknikleri bilen arkadaşlardan bunları kolay anlaşılır şekilde anlatan, pseude-code ile örnekleyen yazılar bekliyoruz.
aklma gelen teknikler:
- plasma
- metaballs
- fire
- z clipping
- isometric engine
- jellyvectors
bu liste uzar gider zaten. bir yerlerden başlayalım, ha? yenilere de kolaylık olur sanki.[post=239]Quoted post[/post][/b]
Originally posted by tesla@Apr 25 2005, 08:24 PM
Nasil yapildiklarindan önce bu efektlerin tanimlarini yazabilir misiniz? Bircok demoda intro da elbet ki defalarca gormusumdur ama isimlerini bilmiyorum.[post=1228]Quoted post[/post][/b]
/*
TGA reader
disq, Mon Jun 21 21:51:34 1999
*/
#include <stdio.h>
#include <malloc.h>
/*
reads uncomressed, RGB, 24 bpp TGA files
returns in a 32bpp pointer, return width and heigth in sizeX and sizeY
*/
unsigned long *readtga(char *file, int *sizeX, int *sizeY)
{
FILE *f;
char *scr;
unsigned long l;
char dum,dum1,dum2;
f=fopen(file,"r");
if (f==NULL) return(NULL);
dum=fgetc(f); /* length of image identification string */
fseek(f,0x0C,SEEK_SET);
dum1=fgetc(f);
dum2=fgetc(f);
*(sizeX)=dum2*256+dum1;
dum1=fgetc(f);
dum2=fgetc(f);
*(sizeY)=dum2*256+dum1;
fseek(f,dum+0x12,SEEK_SET);
scr=(char *)malloc(*(sizeX)**(sizeY)*4);
l=0;
while(!feof(f))
{
*(scr+l)=fgetc(f);
*(scr+l+1)=fgetc(f);
*(scr+l+2)=fgetc(f);
*(scr+l+3)=0;
l+=4;
}
fclose(f);
return((unsigned long *)scr);
}
Screen 13 '320x200x8 lik Ekran
Yukseklik% = 31 'Alev max yuksekligi
k% = Yukseklik%\3 'Ana renklerin ton sayısı
l% = 63 \ k% 'Tonlar arası mesafe
Baslama% = 199 - Yukseklik 'Dikey Tarama baslangicimiz
En% = 63 'Yangının tabanı
x1% = (320 - En%) \ 2 'Yatay taratma baslangici
x2% = x1% + En% 'Yatay tarama sonu.
For t% = 0 to k% 'k% kadar rengi boyucaz
Out &H3C8, t% '3C8h portuna ilgili rengi yazıcaz.
Out &H3C9, kirmizi% 'Siyahtan başlıyoruz
Out &H3C9, 0 'Yeşil ve
Out &H3C9, 0 'Mavi renkler susçak.
kirmizi% = kirmizi% + l% 'her adımda l% kadar artan ton, k% adımda 0 dan 63 e ulaşır ;)
IF kirmizi% > 63 THEN kirmizi% = 63
Next
For t% = 0 to k% 'k% kadar rengi boyucaz yine.
Out &H3C8, t% + k% 'k% kadar rengi boyadık. şimdi 2. k% kadar renjte sıra.
Out &H3C9, 63 'Burası zaten kıpkırmızı oldu
Out &H3C9, yesil% 'sarartalım hafif hafif
Out &H3C9, 0 'Mavi renk bekle...
yesil% = yesil% + l% 'her adımda l% kadar artan ton, k% adımda 0 dan 63 e ulaşır ;)
IF yesil% > 63 THEN yesil% = 63
Next
For t% = 0 to k% 'Son k% kadar renk.
Out &H3C8, t% + k% + k% '2 * k% kadar rengi boyadık. şimdi 3. k% kadar renjte sıra.
Out &H3C9, 63 'Burası zaten kıpkırmızı oldu
Out &H3C9, yesil% 'Burası da yemyeşil. Al sana Sap sayı :)
Out &H3C9, mavi 'Mavi renk artınca, sarıdan beyaza dönüyoruz.
mavi% = mavi% + l% 'her adımda l% kadar artan ton, k% adımda 0 dan 63 e ulaşır ;)
IF mavi% > 63 THEN mavi% = 63
Next
Do 'Ana döngü
a$ = INKEY$ 'Tus kontrol
Gosub Isik 'Baslama kivilcimi
For y% = baslama% to 199 'Dikey tarama
For x% = x1% to x2% 'Yatay tarama
c1% = POINT(x%, y%) 'Taranan nokta
c2% = POINT(x% + 1, y%) 'bir yatay ilerisi
c3% = POINT(x% - 1, y%) 'bir yatay gerisi
c4% = POINT(x%, y% + 1) 'bir aşağısı
c5% = POINT(x%, y% - 2) 'iki aşağısı
C% = (C1% + C2% + C3% + C4% + C5%) \ 5 'BLUR (hepsinin ortalaması)
PSET (X%, Y% - 1), C% 'Taranan noktanın bir üstüne bu rengi koyalım
NEXT
NEXT
LOOP UNTIL A$ <> "" 'Tusabasacika :D
END
Isik:
x% = x1% + RND * En% 'Yangın tabanından rastgele bir yer seç
PSET (x%, 199), RND * Yukseklik% 'rastgele boya
PSET (x% - 1, 199), RND * Yukseklik% 'önü ve
PSET (x% + 1, 199), RND * Yukseklik% 'arkayıda boya
RETURN
'Tolga Arçok
'Ekranınızı yakacak :P
SCREEN 13
RANDOMIZE TIMER
yukseklik% = 63
baslama% = 199 - yukseklik%
o& = CLNG(baslama%) * 320&
b& = o&
en% = 128
x1% = (320 - en%) \ 2
x2% = x1% + en%
taban& = 63680
k% = yukseklik% \ 3
l% = 63 \ k%
FOR t% = 0 TO k%
kirmizi% = kirmizi% + l%
OUT &H3C8, t%
OUT &H3C9, kirmizi%
OUT &H3C9, 0
OUT &H3C9, 0
NEXT
FOR t% = 0 TO k%
kirmizi% = kirmizi% + l%
IF kirmizi% > 63 THEN kirmizi% = 63
yesil% = yesil% + l%
OUT &H3C8, t% + k%
OUT &H3C9, kirmizi%
OUT &H3C9, yesil%
OUT &H3C9, 0
NEXT
FOR t% = 0 TO k%
yesil% = yesil% + l%
mavi% = mavi% + l%
IF yesil% > 63 THEN yesil% = 63
OUT &H3C8, t% + k% * 2
OUT &H3C9, 63
OUT &H3C9, yesil%
OUT &H3C9, mavi%
NEXT
DEF SEG = &HA000
DO
GOSUB DrawLine
o& = b&
FOR y% = baslama% TO 199
FOR x& = x1% TO x2%
oo& = o& + x&
c1% = PEEK(oo&)
c2% = PEEK(oo& - 640&)
c3% = PEEK(oo& + 320&)
c4% = PEEK(oo& + 1)
c5% = PEEK(oo& - 1)
c% = (c1% + c2% + c3% + c4% + c5%) \ 5
IF c% > 0 THEN POKE oo& - 320&, c%
NEXT
o& = o& + 320&
NEXT
LOOP UNTIL INKEY$ <> ""
DEF SEG
END
DrawLine:
kk% = (RND * ((RND * en% \ 5) + en% \ 5))
x& = x1% + kk%
bb& = x& + taban&
c% = INT(RND * yukseklik% \ 3)
t% = (RND * en%)
FOR t& = 0 TO 3
POKE bb& + t&, c%
NEXT
x& = x2% - kk%
bb& = x& + taban&
c% = INT(RND * yukseklik% \ 3)
t% = (RND * en%)
FOR t& = 0 TO 3
POKE bb& + t&, c%
NEXT
ll% = kk% + (RND * (en% - kk% * 2))
x& = x1% + ll%
bb& = x& + taban&
c% = yukseklik% - INT(RND * yukseklik% \ 3)
t% = (RND * en%)
FOR t& = 0 TO 3
POKE bb& + t&, c%
NEXT
RETURN
DEFINT A-Z 'Tüm değişkenler Tam sayı. % işaretine gerek yok!
SCREEN 13 '320x200x8
RANDOMIZE TIMER
Ana% = 6 'Ton atlama
Son% = 21 * Ana% 'Max ton (63 ile VE işlemine tabidir)
FOR t% = 0 TO 21
OUT &H3C8, t%
OUT &H3C9, t% * Ana%
OUT &H3C9, 0
OUT &H3C9, 0
NEXT
FOR t% = 0 TO 21
OUT &H3C8, t% + 21
OUT &H3C9, 0
OUT &H3C9, t% * Ana%
OUT &H3C9, 0
NEXT
FOR t% = 0 TO 21
OUT &H3C8, t% + 42
OUT &H3C9, 0
OUT &H3C9, 0
OUT &H3C9, t% * Ana%
NEXT
For y = 0 to 199 'Rasgele kıvılcımlar çakalım
For x = 0 to 319
l = (RND * 35)
IF l = 1 THEN
k = 21
LINE (x - 2, y - 2) - (x + 2, y + 2), k, BF
END IF
IF l = 12 OR l = 7 THEN
k = 41
LINE (x - 1, y - 1) - (x + 1, y + 1), k, BF
END IF
IF l = 5 OR l = 9 THEN
k = 63
LINE (x - 2, y - 2) - (x + 2, y + 2), k, BF
END IF
Next
Next
'BLUR
For Blur = 0 to 4
For y = -30 to 229
For x = -30 to 349
a1 = POINT(x, y)
a2 = POINT(x + 1, y)
a3 = POINT(x + 1, y - 1)
a4 = POINT(x + 1, y + 1)
a5 = POINT(x - 1, y - 1)
a6 = POINT(x - 1, y + 1)
a7 = POINT(x, y + 1)
a8 = POINT(x, y - 1)
a9 = POINT(x + 2, y)
a10 = POINT(x + 2, y - 1)
a11 = POINT(x + 2, y + 1)
a12 = POINT(x + 2, y - 2)
a13 = POINT(x + 2, y + 2)
a = (a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9 + a10 + a11 + a12 + a13) \ 13
IF a THEN PSET (x, y), a
NEXT
NEXT
NEXT
dk% = 1
dy% = 1
dm% = 1
DO
a$ = INKEY$
FOR t% = 2 TO 63
OUT &H3C7, t% 'Bu porttan, rengin tonlarını OKURUZ!
k% = INP(&H3C9) + dk%
y% = INP(&H3C9) + dy%
m% = INP(&H3C9) + dm%
IF k% > Son% THEN k% = Son%: dk% = -dk%
IF y% > Son% THEN y% = Son%: dy% = -dy%
IF m% > Son% THEN m% = Son%: dm% = -dm%
IF k% < 0 THEN k% = 3: dk% = -dk%
IF y% < 0 THEN y% = 3: dy% = -dy%
IF m% < 0 THEN m% = 3: dm% = -dm%
OUT &H3C8, t%
OUT &H3C9, k%
IF t% > 21 THEN OUT &H3C9, y% ELSE OUT &H3C9, 0
IF t% > 42 THEN OUT &H3C9, m% ELSE OUT &H3C9, 0
NEXT
WAIT &H3DA, 8
LOOP UNTIL a$ <> ""
ındirdim baktım. Demekki aynı yollarda yürümüşüz. Çok Güzel Demolar bunlar, umarım indiren çok olur öğrenecekleri çok şey var.
Hele o duman yok mu ? Alevi dikey değilde trigonometrik olarak dağıtma fikri. O çok güzel. Bence onun tutorunu yazmalısın. Kodlarımız 'yastık altında' kalmasın :D
Bu caret i sizmi yazdınız ? :D süper ya. Ben bu demoyu bi kaç yıl önce görmüştüm. Vay be gavurlara bak neler yazıyorlar demiştim. Zaman zamanda aklıma gelir dururdu tembelliğimden yazmazdım 3D ASCII li bir örnek. Tebrik ettim, anesthetic, decipher, spritus ve flexi ile ayrı ayrı gurur duydum.