Offtopic (I/2010)

Muu yhteisön välinen keskustelu.
Locked
User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: Offtopic (I/2010)

Post by esa94 »

MaGetzUb wrote:
temu92 wrote:CB:hän on tehty Blitzillä ja siten saanut suuren vaikutuksen sen syntaksista :P
Kuka hullu lähtee kirjoittamaan uutta peliohjelmointi kietä jollain proseduraalisella ja kaikenlisäksi kusisella blitz:ä?(Ei se proseduraalisuus sinänsä mikään ongelma ole.) Eihän Zero sanonut suoraan et oisi vääntäny Blitzillä koko homman, vaan käytti muitakin ohjelmointikieliä hyväksi. ;) Blitzisitä oli vaan lainattu syntaksi. :)

En ole välttämättä oikeassa, mutta korjatkaa asia.
Muistaakseni CB:n tulkki on kirjoitettu Blitzillä.
JATothrim
Tech Developer
Tech Developer
Posts: 606
Joined: Tue Aug 28, 2007 6:46 pm
Location: Kuopio

Re: Offtopic (I/2010)

Post by JATothrim »

CoolBasic Beta 10.43 on muistaakseni PureBasic, Blitz, Visual Basic ja Dark Basic mömmö. Tai ainakin näistä kielistä (Blitz ja VB erityisesti) on otettu vaikutteita. Zerppa vaikuttaa haudanneen kääntäjän sorsat varsin syvälle bittiavaruuteen, joten tuskin saamme tietää miten cb tulkki on veistetty. ;) (Älysin nyt tarkemmin miksi CBV3 on CBV3. cbeditor->help->about-> compiler == 2.43)
-On selkeästi impulsiivinen koodaaja joka...
ohjelmoi C++:lla rekursiivisesti instantioidun templaten, jonka jokainen instantiaatio instantioi sekundäärisen singleton-template-luokan, jonka jokainen instanssi käynistää säikeen tulostakseen 'jea'.
Pettis
The Evil Admin
The Evil Admin
Posts: 1044
Joined: Sun Aug 26, 2007 5:08 pm
Location: Rovaniemi
Contact:

Re: Offtopic (I/2010)

Post by Pettis »

CBKK:n korvike etenee. Syntaksin värjäys tehty ja sivun ominaisuuksista noin puolet kasassa. Yhteensä käytetty aikaa jotain ~16 tuntia.

Koodin värjäys teettänyt tähän mennessä eniten. Sen jälkeen koodiboksin rakentaminen sivulle. Muutoin homma on ollut aika suoraviivaista. Voisi samalla vaivalla tuohon saittiin laittaa mukaan CB-tuotosten hostauksen ja niiden arvostelun / kommentoinnin.

Muttah, tältä päivältä taitaa koodailu riittää. Regexpit vilisee silmissä ja kärmekset luikertelee pöydällä (ohjelmoin tätä Pythonilla).
CB Repository .com - Sinne ne kaikki koodit menneet on!
MunVerkko - Ilmaisia foorumeita ja blogeja
User avatar
Kille
Active Member
Posts: 249
Joined: Wed Aug 26, 2009 3:50 pm
Location: Juankoski

Re: Offtopic (I/2010)

Post by Kille »

Noniin. Pistin Blitzin tilauksen menemään ja saa nähdä koska se tulee. Pitäis tulla sekä digitaalisena että levykkeenä ja hintaa tuli noin sata euroa.
ZEPPELIN
Jatkoa tulossa... tällä kertaa lataus ei kestä viikkoa
temu92
Web Developer
Web Developer
Posts: 1226
Joined: Mon Aug 27, 2007 9:56 pm
Location: Gamindustri
Contact:

Re: Offtopic (I/2010)

Post by temu92 »

Itse yritin sitä ostella netin kautta joskus viime kesänä, mutta failasin maksun jotenkin :P

Btw, uus sigi layout palveluun :)
Pettis
The Evil Admin
The Evil Admin
Posts: 1044
Joined: Sun Aug 26, 2007 5:08 pm
Location: Rovaniemi
Contact:

Re: Offtopic (I/2010)

Post by Pettis »

temu92 wrote:Btw, uus sigi layout palveluun :)
En huomaa allekirjoituksessasi mitään uutta.
CB Repository .com - Sinne ne kaikki koodit menneet on!
MunVerkko - Ilmaisia foorumeita ja blogeja
temu92
Web Developer
Web Developer
Posts: 1226
Joined: Mon Aug 27, 2007 9:56 pm
Location: Gamindustri
Contact:

Re: Offtopic (I/2010)

Post by temu92 »

Image

Se on nyt tuon näköinen, aikaisemmin enemmänkin tänne päin:

Image

Pitääpi tehdä vielä lisää layoutteja myöhemmin, ainakin pelkistetty tekstilayout mielessä ollut pidemmän aikaa. Tällähetkellä valittavia layoutteja on 6 kpl :P

Vielä kun keksis miten ton Paypalin saa viritettyä siten että porukka vois ostaa premium membershipin. Ajatuksissa ollu semmonen että premiumilla ehkä sais animoidun allekirjoituskuvan jossa vaihtuu muutaman sekunnin välein hieman monipuolisempi infopaketti hahmoista, tiedä sitten miten PHP:lla saa animoituja giffejä generoitua kun peruskirjasto ei siihen sinällään taivu. Oliskos mitään muita ehdotuksia premium membereiden eduksi? Ja ohjeita Paypalin kanssa. Tiedä sitten vielä kannattaisko olla jokin erillinen kuukausimaksu vai vaan pelkkä kertamaksu ja kuinka suuri se sitten olis.
User avatar
Zero
Lead Developer
Lead Developer
Posts: 727
Joined: Sun Aug 26, 2007 2:30 pm
Location: Helsinki, Finland
Contact:

Re: Offtopic (I/2010)

Post by Zero »

MaGetzUb wrote:
temu92 wrote:CB:hän on tehty Blitzillä ja siten saanut suuren vaikutuksen sen syntaksista :P
Kuka hullu lähtee kirjoittamaan uutta peliohjelmointi kietä jollain proseduraalisella ja kaikenlisäksi kusisella blitz:ä?(Ei se proseduraalisuus sinänsä mikään ongelma ole.) Eihän Zero sanonut suoraan et oisi vääntäny Blitzillä koko homman, vaan käytti muitakin ohjelmointikieliä hyväksi. ;) Blitzisitä oli vaan lainattu syntaksi. :)

En ole välttämättä oikeassa, mutta korjatkaa asia.
Kääntäjä Visual Basic 6.0, tulkki ja peliengine Blitz3D.
CoolBasic henkilökuntaa
Johtava Suunnittelija
CoolBasic V3, CoolBasic Classic

http://www.coolbasic.com/blog
User avatar
Kille
Active Member
Posts: 249
Joined: Wed Aug 26, 2009 3:50 pm
Location: Juankoski

Re: Offtopic (I/2010)

Post by Kille »

Tietääkö kukaan mitään hyvää ohjelmaa jolla voisi tehdä 3d malleja blitzille?
(tiedostotyypit ovat x, 3ds ja b3d)
ZEPPELIN
Jatkoa tulossa... tällä kertaa lataus ei kestä viikkoa
User avatar
Sami The Great
Advanced Member
Posts: 485
Joined: Tue Aug 28, 2007 4:15 pm
Contact:

Re: Offtopic (I/2010)

Post by Sami The Great »

Kille wrote:Tietääkö kukaan mitään hyvää ohjelmaa jolla voisi tehdä 3d malleja blitzille?
(tiedostotyypit ovat x, 3ds ja b3d)
Muistaakseni ainakin Blenderillä pystyy tallentamaan 3ds muotoon.
http://www.rockodilegames.com
CoolBasickin käyttäjä vuodesta 2004.
Latexi95
Guru
Posts: 1166
Joined: Sat Sep 20, 2008 5:10 pm
Location: Lempäälä

Re: Offtopic (I/2010)

Post by Latexi95 »

Sami The Great wrote:
Kille wrote:Tietääkö kukaan mitään hyvää ohjelmaa jolla voisi tehdä 3d malleja blitzille?
(tiedostotyypit ovat x, 3ds ja b3d)
Muistaakseni ainakin Blenderillä pystyy tallentamaan 3ds muotoon.
Taitaa myös onnistua x:n tallenus.

Veikkauksia mistä voisi johtua, että sivujeni kaikki javascriptit lakkaavat toimimasta,
vaikka en niihin kaikkiin ole koskenutkaan?
ezbe
Tech Developer
Tech Developer
Posts: 93
Joined: Fri May 08, 2009 6:53 pm

Re: Offtopic (I/2010)

Post by ezbe »

Kille wrote:Tietääkö kukaan mitään hyvää ohjelmaa jolla voisi tehdä 3d malleja blitzille?
(tiedostotyypit ovat x, 3ds ja b3d)
MilkShape3D:tä olen yleensä käyttänyt skeletal-animaatioiden ja formaattimuunnosten tekoon, tukee valtavasti eri formaatteja (mm. suoraan b3d:tä, mikä on aika välttämätöntä, jos haluat käyttää niveliä/skeletal-kampetta), joskin varsinainen mallinnus on tehty joko muiden toimesta tai olen mallintanut DeleD:llä ja vaihtanut formaattia MilkShapessa, joskus harvoin mallinnuskin on tehty itse MilkShapella (tosin pidän enempi DeleD:in käyttöliittymästä). Ei ole ilmainen softa, mutta lisenssi maksoi aikoinaan 20e (2004), tuskin on paljon kalliimpi tänäkään päivänä.
EDIT:

Edit: X-formaattien (.x) kohdalla kannattaa ottaa huomioon, etteivät ne aina ole keskenään yhteensopivia (x:n versionumerot menevet DirectX:n mukaan). Muistelisin, että Blitz ymmärsi 8.x -versioita, muttei enää 9:iä, varma en ole. Kannattaa tarkistaa mitä versiota mallinnussoftasi työntää ulos.

phons
Guru
Posts: 1056
Joined: Wed May 14, 2008 10:11 am

Re: Offtopic (I/2010)

Post by phons »

En ole tutustunut MilkShapeen, mutta sitä on kehuttu. Mutta Blenderillä jos teet, ja suosittelisin, niin tässä olis b3d exporter scripti:
Ei ole omaa, netistä löysin ja käytän itsekkin, tämä formaatti oli ainoa joka tuki animaatiota ja boneja.. tosin en tehnyt mitään suurta tutkimusta..

Code: Select all

#!BPY
#coding: utf-8
"""
Name: 'B3D Exporter (.b3d)...'
Blender: 245
Group: 'Export'
Tooltip: 'Export to Blitz3D file format (.b3d)'
"""
__author__ = ["Diego 'GaNDaLDF' Parisi"]
__url__ = ["www.gandaldf.com"]
__version__ = "2.04"
__bpydoc__ = """\
"""
 
# BLITZ3D EXPORTER 2.04:
# Copyright (C) 2008 by Diego "GaNDaLDF" Parisi  -  www.gandaldf.com
#
# LICENSE:
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 
#If you get an error here, it might be
#because you don't have Python installed.
import Blender
import BPyMesh
import sys,os,os.path,struct,math,string
from Blender import Mathutils
from Blender.Mathutils import *
from Blender import Draw,BGL
from Blender.BGL import *
 
if not hasattr(sys,"argv"): sys.argv = ["???"]
 
#Events
EVENT_ALL = 1
EVENT_SEL = 2
EVENT_NOR = 3
EVENT_COL = 4
EVENT_CAM = 5
EVENT_LIG = 6
EVENT_EXP = 7
EVENT_QUI = 8
 
#Global Stacks
flag_stack = []
sets_stack = []
texs_stack = []
brus_stack = []
mesh_stack = []
bone_stack = []
keys_stack = []
 
#Transformation Matrix
TRANS_MATRIX = Mathutils.Matrix([-1,0,0,0],[0,0,1,0],[0,1,0,0],[0,0,0,1])
 
#Support Functions
def write_int(value):
    return struct.pack("<i",value)
 
def write_float(value):
    return struct.pack("<f",round(value,4))
 
def write_string(value):
    binary_format = "<%ds"%(len(value)+1)
    return struct.pack(binary_format,value)
 
def write_chunk(name,value):
    return name + write_int(len(value)) + value
 
#Write B3D File
def write_b3d_file(filename):
    file_buf = ""
    temp_buf = ""
 
    temp_buf += write_int(1) #Version
    temp_buf += write_texs() #TEXS
    temp_buf += write_brus() #BRUS
    temp_buf += write_node() #NODE
 
    if len(temp_buf) > 0:
        file_buf += write_chunk("BB3D",temp_buf)
        temp_buf = ""
 
    file = open(filename,'wb')
    file.write(file_buf)
    file.close()
 
#Write TEXS Chunk
def write_texs():
    texs_buf = ""
    temp_buf = ""
    layer_max = 0
    obj_count = 0
    set_wrote = 0
 
    if flag_stack[1]:
        exp_obj = Blender.Object.GetSelected()
    else:
        exp_obj = Blender.Object.Get()
 
    for obj in exp_obj:
        if obj.type == "Mesh":
            set_count = 0
            set_wrote = 0
            data = obj.getData(mesh = True)
            orig_uvlayer = data.activeUVLayer
            layer_set = [[],[],[],[],[],[],[],[]]
            sets_stack.append([[],[],[],[],[],[],[],[]])
 
            if len(data.getUVLayerNames()) <= 8:
                if len(data.getUVLayerNames()) > layer_max:
                    layer_max = len(data.getUVLayerNames())
            else:
                layer_max = 8
 
            for face in data.faces:
                for iuvlayer,uvlayer in enumerate(data.getUVLayerNames()):
                    if iuvlayer < 8:
                        data.activeUVLayer = uvlayer
                        layer_set[iuvlayer].append(face.uv)
 
            for i in xrange(len(data.getUVLayerNames())):
                if set_wrote:
                    set_count += 1
                    set_wrote = 0
 
                for iuvlayer in xrange(i,len(data.getUVLayerNames())):
                    if layer_set[i] == layer_set[iuvlayer]:
                        if sets_stack[obj_count][iuvlayer] == []:
                            if set_count == 0:
                                tex_flag = 1
                            elif set_count == 1:
                                tex_flag = 65536
                            elif set_count > 1:
                                tex_flag = 1
                            sets_stack[obj_count][iuvlayer] = tex_flag
                            set_wrote = 1
 
            for face in data.faces:
                for iuvlayer,uvlayer in enumerate(data.getUVLayerNames()):
                    if iuvlayer < 8:
                        data.activeUVLayer = uvlayer
                        if face.image:
                            if not [face.image.name,sets_stack[obj_count][iuvlayer]] in texs_stack:
                                texs_stack.append([face.image.name,sets_stack[obj_count][iuvlayer]])
                                temp_buf += write_string(Blender.sys.basename(face.image.getFilename())) #Texture File Name
                                temp_buf += write_int(sets_stack[obj_count][iuvlayer]) #Flags
                                temp_buf += write_int(2)   #Blend     
                                temp_buf += write_float(0) #X_Pos
                                temp_buf += write_float(0) #Y_Pos
                                temp_buf += write_float(1) #X_Scale
                                temp_buf += write_float(1) #Y_Scale
                                temp_buf += write_float(0) #Rotation
 
            obj_count += 1
 
            if orig_uvlayer:
                data.activeUVLayer = orig_uvlayer
 
    texs_stack.append(layer_max)
 
    if len(temp_buf) > 0:
        texs_buf += write_chunk("TEXS",temp_buf)
        temp_buf = ""
 
    return texs_buf
 
#Write BRUS Chunk
def write_brus():
    brus_buf = ""
    temp_buf = ""
    mat_count = 0
    obj_count = 0
 
    if flag_stack[1]:
        exp_obj = Blender.Object.GetSelected()
    else:
        exp_obj = Blender.Object.Get()
 
    for obj in exp_obj:
        if obj.type == "Mesh":
            data = obj.getData(mesh = True)
            orig_uvlayer = data.activeUVLayer
 
            for face in data.faces:
                img_found = 0
                face_stack = []
                for iuvlayer,uvlayer in enumerate(data.getUVLayerNames()):
                    if iuvlayer < 8:
                        data.activeUVLayer = uvlayer
                        if data.faceUV and face.image:
                            img_found = 1
                            for i in xrange(len(texs_stack)-1):
                                if texs_stack[i][0] == face.image.name:
                                    if texs_stack[i][1] == sets_stack[obj_count][iuvlayer]:
                                        img_id = i
                        else:
                            img_id = -1
 
                        face_stack.insert(iuvlayer,img_id)
 
                for i in xrange(len(face_stack),texs_stack[-1]):
                    face_stack.append(-1)
 
                if not img_found:
                    if data.materials:
                        if data.materials[face.mat]:
                            mat_data = data.materials[face.mat]
                            mat_colr = mat_data.rgbCol[0]
                            mat_colg = mat_data.rgbCol[1]
                            mat_colb = mat_data.rgbCol[2]
                            mat_alpha = mat_data.getAlpha()
                            mat_name = mat_data.name
 
                            if not mat_name in brus_stack:
                                brus_stack.append(mat_name)
                                temp_buf += write_string(mat_name) #Brush Name
                                temp_buf += write_float(mat_colr)  #Red
                                temp_buf += write_float(mat_colg)  #Green
                                temp_buf += write_float(mat_colb)  #Blue
                                temp_buf += write_float(mat_alpha) #Alpha
                                temp_buf += write_float(0)         #Shininess
                                temp_buf += write_int(1)           #Blend
                                if flag_stack[3] and data.getColorLayerNames():
                                    temp_buf += write_int(2) #Fx
                                else:
                                    temp_buf += write_int(0) #Fx
 
                                for i in face_stack:
                                    temp_buf += write_int(i) #Texture ID
                    else:
                        if flag_stack[3] and data.getColorLayerNames():
                            if not face_stack in brus_stack:
                                brus_stack.append(face_stack)
                                mat_count += 1
                                temp_buf += write_string("Brush.%.3i"%mat_count) #Brush Name
                                temp_buf += write_float(1) #Red
                                temp_buf += write_float(1) #Green
                                temp_buf += write_float(1) #Blue
                                temp_buf += write_float(1) #Alpha
                                temp_buf += write_float(0) #Shininess
                                temp_buf += write_int(1)   #Blend
                                temp_buf += write_int(2)   #Fx
 
                                for i in face_stack:
                                    temp_buf += write_int(i) #Texture ID
                else:
                    if not face_stack in brus_stack:
                        brus_stack.append(face_stack)
                        mat_count += 1
                        temp_buf += write_string("Brush.%.3i"%mat_count) #Brush Name
                        temp_buf += write_float(1) #Red
                        temp_buf += write_float(1) #Green
                        temp_buf += write_float(1) #Blue
                        temp_buf += write_float(1) #Alpha
                        temp_buf += write_float(0) #Shininess
                        temp_buf += write_int(1)   #Blend
                        if flag_stack[3] and data.getColorLayerNames():
                            temp_buf += write_int(2) #Fx
                        else:
                            temp_buf += write_int(0) #Fx
 
                        for i in face_stack:
                            temp_buf += write_int(i) #Texture ID
 
            obj_count += 1
 
            if orig_uvlayer:
                data.activeUVLayer = orig_uvlayer
 
    if len(temp_buf) > 0:
        brus_buf += write_chunk("BRUS",write_int(texs_stack[-1]) + temp_buf) #N Texs
        temp_buf = ""
 
    return brus_buf
 
#Write NODE Chunk
def write_node():
    global bone_stack
    global keys_stack
    root_buf = ""
    node_buf = ""
    main_buf = ""
    temp_buf = ""
    obj_count = 0
    amb_light = 0
 
    num_mesh = 0
    num_ligs = 0
    num_cams = 0
    num_lorc = 0
    exp_scn = Blender.Scene.GetCurrent()
    exp_con = exp_scn.getRenderingContext()
 
    first_frame = Blender.Draw.Create(exp_con.startFrame())
    last_frame = Blender.Draw.Create(exp_con.endFrame())
    num_frames = last_frame.val - first_frame.val
 
    if flag_stack[1]:
        exp_obj = Blender.Object.GetSelected()
    else:
        exp_obj = Blender.Object.Get()
 
    for obj in exp_obj:
        if obj.type == "Mesh":
            num_mesh += 1
        if obj.type == "Camera":
            num_cams += 1
        if obj.type == "Lamp":
            num_ligs += 1
 
    if flag_stack[4] == 1:
        num_lorc += num_cams
 
    if flag_stack[5] == 1:
        num_lorc += 1
        num_lorc += num_ligs
 
    if num_mesh + num_lorc > 1:
        exp_root = 1
    else:
        exp_root = 0
 
    if exp_root:   
        root_buf += write_string("ROOT") #Node Name
 
        root_buf += write_float(0) #Position X
        root_buf += write_float(0) #Position Y
        root_buf += write_float(0) #Position Z
 
        root_buf += write_float(1) #Scale X
        root_buf += write_float(1) #Scale Y
        root_buf += write_float(1) #Scale Z
 
        root_buf += write_float(1) #Rotation W
        root_buf += write_float(0) #Rotation X
        root_buf += write_float(0) #Rotation Y
        root_buf += write_float(0) #Rotation Z
 
    for obj in exp_obj:
        if obj.type == "Mesh":
            bone_stack = []
            keys_stack = []
            data = obj.getData(mesh = True)
 
            arm_action = None
            if obj.getParent():
                if obj.getParent().type == "Armature":
                    arm = obj.getParent()
                    if arm.getAction():
                        arm_action = arm.getAction()
 
            if arm_action:
                matrix = Matrix()
 
                temp_buf += write_string(obj.name) #Node Name
 
                position = matrix.translationPart()
                temp_buf += write_float(-position[0]) #Position X
                temp_buf += write_float(position[1])  #Position Y
                temp_buf += write_float(position[2])  #Position Z
 
                scale = matrix.scalePart()
                temp_buf += write_float(scale[0]) #Scale X
                temp_buf += write_float(scale[2]) #Scale Y
                temp_buf += write_float(scale[1]) #Scale Z
 
                quat = matrix.toQuat()
                quat.normalize()
 
                temp_buf += write_float(quat.w) #Rotation W
                temp_buf += write_float(quat.x) #Rotation X
                temp_buf += write_float(quat.z) #Rotation Y
                temp_buf += write_float(quat.y) #Rotation Z
            else:
                matrix = obj.getMatrix("worldspace")
                matrix *= TRANS_MATRIX
 
                temp_buf += write_string(obj.name) #Node Name
 
                position = matrix.translationPart()
                temp_buf += write_float(-position[0]) #Position X
                temp_buf += write_float(position[1])  #Position Y
                temp_buf += write_float(position[2])  #Position Z
 
                scale = matrix.scalePart()
                temp_buf += write_float(scale[0]) #Scale X
                temp_buf += write_float(scale[2]) #Scale Y
                temp_buf += write_float(scale[1]) #Scale Z
 
                matrix *= RotationMatrix(180,4,"y")
                matrix *= RotationMatrix(90,4,"x")
                quat = matrix.toQuat()
                quat.normalize()
 
                temp_buf += write_float(quat.w) #Rotation W
                temp_buf += write_float(quat.x) #Rotation X
                temp_buf += write_float(quat.z) #Rotation Y
                temp_buf += write_float(quat.y) #Rotation Z
 
            if arm_action:
                Blender.Set("curframe",0)
                Blender.Window.Redraw()
 
                data = arm.getData()
                arm_matrix = arm.getMatrix("worldspace")
                arm_matrix *= TRANS_MATRIX.invert()
 
                def read_armature(arm_matrix,bone,parent = None):
                    if (parent and not bone.parent.name == parent.name):
                        return
 
                    matrix = Blender.Mathutils.Matrix(bone.matrix["ARMATURESPACE"])
 
                    if parent:
                        par_matrix = matrix * Blender.Mathutils.Matrix(parent.matrix["ARMATURESPACE"]).invert()
                    else:
                        par_matrix = matrix * arm_matrix
 
                    bone_stack.append([par_matrix,parent,bone])
 
                    if bone.children:
                        for child in bone.children: read_armature(arm_matrix,child,bone)
 
                for bone in data.bones.values():
                    if not bone.parent:
                        read_armature(arm_matrix,bone)
 
                arm_action.setActive(arm)
                frame_count = first_frame.val
 
                while frame_count <= last_frame.val:
                    Blender.Set("curframe",int(frame_count))
                    Blender.Window.Redraw()
                    arm_pose = arm.getPose()
                    arm_matrix = arm.getMatrix("worldspace")
                    arm_matrix *= TRANS_MATRIX
 
                    for bone_name in data.bones.keys():
                        bone_matrix = Blender.Mathutils.Matrix(arm_pose.bones[bone_name].poseMatrix)
 
                        for ibone in xrange(len(bone_stack)):
                            if bone_stack[ibone][2].name == bone_name:
                                if bone_stack[ibone][1]:
                                    par_matrix = Blender.Mathutils.Matrix(arm_pose.bones[bone_stack[ibone][1].name].poseMatrix)
                                    bone_matrix *= par_matrix.invert()
                                else:
                                    bone_matrix *= arm_matrix
 
                                bone_loc = bone_matrix.translationPart()
                                bone_rot = bone_matrix.rotationPart().toQuat()
                                bone_rot.normalize()
                                bone_sca = bone_matrix.scalePart()
                                keys_stack.append([frame_count - first_frame.val,bone_name,bone_loc,bone_sca,bone_rot])
 
                    frame_count += 1
 
                Blender.Set("curframe",0)
                Blender.Window.Redraw()
 
            temp_buf += write_node_mesh(obj,obj_count,arm_action,exp_root) #NODE MESH
 
            if arm_action:
                temp_buf += write_node_anim(num_frames) #NODE ANIM
 
                for ibone in xrange(len(bone_stack)):
                    if not bone_stack[ibone][1]:
                        temp_buf += write_node_node(ibone) #NODE NODE
 
            obj_count += 1
 
            if len(temp_buf) > 0:
                node_buf += write_chunk("NODE",temp_buf)
                temp_buf = ""
 
        if flag_stack[4]:
            if obj.type == "Camera":
                data = obj.getData()
                matrix = obj.getMatrix("worldspace")
                matrix *= TRANS_MATRIX
 
                if data.type == "ortho":
                    cam_type = 2
                    cam_zoom = round(data.scale,4)
                else:
                    cam_type = 1
                    cam_zoom = round(data.lens,4)
 
                cam_near = round(data.clipStart,4)
                cam_far = round(data.clipEnd,4)
 
                node_name = ("CAMS"+"\n%s"%obj.name+"\n%s"%cam_type+\
                             "\n%s"%cam_zoom+"\n%s"%cam_near+"\n%s"%cam_far)
                temp_buf += write_string(node_name) #Node Name
 
                position = matrix.translationPart()
                temp_buf += write_float(-position[0]) #Position X
                temp_buf += write_float(position[1])  #Position Y
                temp_buf += write_float(position[2])  #Position Z
 
                scale = matrix.scalePart()
                temp_buf += write_float(scale[0]) #Scale X
                temp_buf += write_float(scale[1]) #Scale Y
                temp_buf += write_float(scale[2]) #Scale Z
 
                matrix *= RotationMatrix(180,4,"y")
                quat = matrix.toQuat()
                quat.normalize()
 
                temp_buf += write_float(quat.w)  #Rotation W
                temp_buf += write_float(quat.x)  #Rotation X
                temp_buf += write_float(quat.y)  #Rotation Y
                temp_buf += write_float(-quat.z) #Rotation Z
 
                if len(temp_buf) > 0:
                    node_buf += write_chunk("NODE",temp_buf)
                    temp_buf = ""
 
        if flag_stack[5]:
            if amb_light == 0:
                data = Blender.World.GetCurrent()
 
                amb_light = 1
                amb_color = (int(data.amb[2]*255) |(int(data.amb[1]*255) << 8) | (int(data.amb[0]*255) << 16))
 
                node_name = ("AMBI"+"\n%s"%amb_color)
                temp_buf += write_string(node_name) #Node Name
 
                temp_buf += write_float(0) #Position X
                temp_buf += write_float(0) #Position Y
                temp_buf += write_float(0) #Position Z
 
                temp_buf += write_float(1) #Scale X
                temp_buf += write_float(1) #Scale Y
                temp_buf += write_float(1) #Scale Z
 
                temp_buf += write_float(1) #Rotation W
                temp_buf += write_float(0) #Rotation X
                temp_buf += write_float(0) #Rotation Y
                temp_buf += write_float(0) #Rotation Z
 
                if len(temp_buf) > 0:
                    node_buf += write_chunk("NODE",temp_buf)
                    temp_buf = ""
 
            if obj.type == "Lamp":
                data = obj.getData()
                matrix = obj.getMatrix("worldspace")
                matrix *= TRANS_MATRIX
 
                if data.type == 0:
                    lig_type = 2
                elif data.type == 2:
                    lig_type = 3
                else:
                    lig_type = 1
 
                lig_angle = round(data.spotSize,4)
                lig_color = (int(data.b*255) |(int(data.g*255) << 8) | (int(data.r*255) << 16))
                lig_range = round(data.dist,4)
 
                node_name = ("LIGS"+"\n%s"%obj.name+"\n%s"%lig_type+\
                             "\n%s"%lig_angle+"\n%s"%lig_color+"\n%s"%lig_range)
                temp_buf += write_string(node_name) #Node Name
 
                position = matrix.translationPart()
                temp_buf += write_float(-position[0]) #Position X
                temp_buf += write_float(position[1])  #Position Y
                temp_buf += write_float(position[2])  #Position Z
 
                scale = matrix.scalePart()
                temp_buf += write_float(scale[0]) #Scale X
                temp_buf += write_float(scale[1]) #Scale Y
                temp_buf += write_float(scale[2]) #Scale Z
 
                matrix *= RotationMatrix(180,4,"y")
                quat = matrix.toQuat()
                quat.normalize()
 
                temp_buf += write_float(quat.w)  #Rotation W
                temp_buf += write_float(quat.x)  #Rotation X
                temp_buf += write_float(quat.y)  #Rotation Y
                temp_buf += write_float(-quat.z) #Rotation Z
 
                if len(temp_buf) > 0:
                    node_buf += write_chunk("NODE",temp_buf)
                    temp_buf = ""
 
    if len(node_buf) > 0:
        if exp_root:
            main_buf += write_chunk("NODE",root_buf + node_buf)
        else:
            main_buf += node_buf
 
        node_buf = ""
        root_buf = ""
 
    return main_buf
 
#Write NODE MESH Chunk
def write_node_mesh(obj,obj_count,arm_action,exp_root):
    global mesh_stack
    mesh_stack = []
    mesh_buf = ""
    temp_buf = ""
 
    temp_buf += write_int(-1) #Brush ID
    temp_buf += write_node_mesh_vrts(obj,obj_count,arm_action,exp_root) #NODE MESH VRTS 
    temp_buf += write_node_mesh_tris(obj,obj_count,arm_action,exp_root) #NODE MESH TRIS
 
    if len(temp_buf) > 0:
        mesh_buf += write_chunk("MESH",temp_buf)
        temp_buf = ""
 
    return mesh_buf
 
#Write NODE MESH VRTS Chunk
def write_node_mesh_vrts(obj,obj_count,arm_action,exp_root):
    vrts_buf = ""
    temp_buf = ""
    obj_flags = 0
    ids_count = 0
 
    data = obj.getData(mesh = True)
    orig_uvlayer = data.activeUVLayer
 
    if flag_stack[2]:
        obj_flags += 1
 
    if flag_stack[3] and data.getColorLayerNames():
        obj_flags += 2
 
    temp_buf += write_int(obj_flags) #Flags
    temp_buf += write_int(len(data.getUVLayerNames())) #UV Set
    temp_buf += write_int(2) #UV Set Size
 
    for i in data.verts:
        mesh_stack.append([-1,-1,-1,[],[[],[],[],[],[],[],[],[]],[]])
 
    for face in data.faces:
        for ivert,vert in enumerate(face.verts):
            if mesh_stack[vert.index][0] == -1:
                link_matrix = obj.getMatrix("worldspace")
                mesh_matrix = Matrix(link_matrix[0],link_matrix[1],link_matrix[2],link_matrix[3])
                vert_matrix = TranslationMatrix(vert.co)
 
                if arm_action:
                    vert_matrix *= mesh_matrix
 
                vert_matrix *= TRANS_MATRIX
                vert_matrix = vert_matrix.translationPart()
 
                mesh_stack[vert.index][0] = vert.index
                mesh_stack[vert.index][1] = vert_matrix
 
                if flag_stack[2]:
                    link_matrix = obj.getMatrix("worldspace")
                    mesh_matrix = Matrix(link_matrix[0],link_matrix[1],link_matrix[2],link_matrix[3])
                    norm_matrix = TranslationMatrix(vert.no)
 
                    if arm_action:
                        norm_matrix *= mesh_matrix
 
                    norm_matrix *= TRANS_MATRIX
                    norm_matrix = norm_matrix.translationPart()
 
                    mesh_stack[vert.index][2] = norm_matrix
 
                if flag_stack[3] and data.getColorLayerNames():
                    mesh_stack[vert.index][3] = face.col[ivert]
 
                if data.vertexUV and not data.faceUV:
                    mesh_stack[vert.index][4][0].append(vert.uvco[0])
                if not data.vertexUV and not data.faceUV:
                    mesh_stack[vert.index][4][0].append([0.0,0.0])
 
                for vert_influ in data.getVertexInfluences(vert.index):
                    mesh_stack[vert.index][5].append(vert_influ)
 
    if data.faceUV:
        if not 65536 in sets_stack[obj_count]:
            vert_opti = 1
        else:
            vert_opti = 0
 
        for iuvlayer,uvlayer in enumerate(data.getUVLayerNames()):
            if iuvlayer < 8:
                data.activeUVLayer = uvlayer
                for face in data.faces:
                    for ivert,vert in enumerate(face.verts):
                        if vert_opti:
                            if not face.uv[ivert] in mesh_stack[vert.index][4][iuvlayer]:
                                mesh_stack[vert.index][4][iuvlayer].append(face.uv[ivert])
                        else:
                            mesh_stack[vert.index][4][iuvlayer].append(face.uv[ivert])
 
    if orig_uvlayer:
        data.activeUVLayer = orig_uvlayer
 
    for ivert in xrange(len(mesh_stack)):
        mesh_stack[ivert][0] = ids_count
        for iuv in xrange(len(mesh_stack[ivert][4][0])):
            ids_count += 1
 
            temp_buf += write_float(-mesh_stack[ivert][1].x) #X
            temp_buf += write_float(mesh_stack[ivert][1].y)  #Y
            temp_buf += write_float(mesh_stack[ivert][1].z)  #Z
 
            if flag_stack[2]:
                temp_buf += write_float(-mesh_stack[ivert][2].x) #NX
                temp_buf += write_float(mesh_stack[ivert][2].y)  #NY
                temp_buf += write_float(mesh_stack[ivert][2].z)  #NZ
 
            if flag_stack[3] and data.getColorLayerNames():
                temp_buf += write_float(mesh_stack[ivert][3].r/255.0) #R
                temp_buf += write_float(mesh_stack[ivert][3].g/255.0) #G
                temp_buf += write_float(mesh_stack[ivert][3].b/255.0) #B
                temp_buf += write_float(mesh_stack[ivert][3].a/255.0) #A
 
            for iuvlayer in xrange(len(data.getUVLayerNames())):
                temp_buf += write_float(mesh_stack[ivert][4][iuvlayer][iuv][0])  #U
                temp_buf += write_float(-mesh_stack[ivert][4][iuvlayer][iuv][1]) #V
 
    if len(temp_buf) > 0:
        vrts_buf += write_chunk("VRTS",temp_buf)
        temp_buf = ""
 
    return vrts_buf
 
#Write NODE MESH TRIS Chunk
def write_node_mesh_tris(obj,obj_count,arm_action,exp_root):
    tris_buf = ""
    temp_buf = ""
    last_brus = None
    brus_written = 0
 
    data = obj.getData(mesh = True)
    orig_uvlayer = data.activeUVLayer
 
    for face in data.faces:
        img_found = 0
        face_stack = []
        for iuvlayer,uvlayer in enumerate(data.getUVLayerNames()):
            if iuvlayer < 8:
                data.activeUVLayer = uvlayer
                if data.faceUV and face.image:
                    img_found = 1
                    for i in xrange(len(texs_stack)-1):
                        if texs_stack[i][0] == face.image.name:
                            if texs_stack[i][1] == sets_stack[obj_count][iuvlayer]:
                                img_id = i
                else:
                    img_id = -1
 
                face_stack.insert(iuvlayer,img_id)
 
        for i in xrange(len(face_stack),texs_stack[-1]):
            face_stack.append(-1)
 
        if img_found == 0:
            brus_id = -1
            if data.materials:
                if data.materials[face.mat]:
                    mat_name = data.materials[face.mat].name
                    for i in xrange(len(brus_stack)):
                        if brus_stack[i] == mat_name:
                            brus_id = i
            else:
                for i in xrange(len(brus_stack)):
                    if brus_stack[i] == face_stack:
                        brus_id = i               
        else:
            brus_id = -1
            for i in xrange(len(brus_stack)):
                if brus_stack[i] == face_stack:
                    brus_id = i
 
        if last_brus <> brus_id:
            if brus_written == 0:
                brus_written = 1
            else:
                if len(temp_buf) > 0: 
                    tris_buf += write_chunk("TRIS",temp_buf)
                    temp_buf = ""
 
            temp_buf += write_int(brus_id) #Brush ID
            last_brus = brus_id
 
        face_id = [0,0,0,0]
 
        if data.faceUV:
            data.activeUVLayer = data.getUVLayerNames()[0]
            for i in xrange(len(face.verts)):
                for iuv in xrange(len(mesh_stack[face.v[i].index][4][0])):
                    if mesh_stack[face.v[i].index][4][0][iuv] == face.uv[i]:
                        face_id[i] = mesh_stack[face.v[i].index][0] + iuv
        else:
            for i in xrange(len(face.verts)):
                face_id[i] = mesh_stack[face.v[i].index][0]
 
        temp_buf += write_int(face_id[2]) #A
        temp_buf += write_int(face_id[1]) #B
        temp_buf += write_int(face_id[0]) #C
 
        if len(face.v) == 4:
            temp_buf += write_int(face_id[3]) #A
            temp_buf += write_int(face_id[2]) #B
            temp_buf += write_int(face_id[0]) #C
 
    if orig_uvlayer:
        data.activeUVLayer = orig_uvlayer
 
    if len(temp_buf) > 0:
        tris_buf += write_chunk("TRIS",temp_buf)
        temp_buf = ""
 
    return tris_buf
 
#Write NODE ANIM Chunk
def write_node_anim(num_frames):
    anim_buf = ""
    temp_buf = ""
 
    temp_buf += write_int(0) #Flags
    temp_buf += write_int(num_frames) #Frames
    temp_buf += write_float(60) #FPS
 
    if len(temp_buf) > 0:
        anim_buf += write_chunk("ANIM",temp_buf)
        temp_buf = ""
 
    return anim_buf
 
#Write NODE NODE Chunk
def write_node_node(ibone):
    node_buf = ""
    temp_buf = ""
 
    matrix = bone_stack[ibone][0]
    temp_buf += write_string(bone_stack[ibone][2].name) #Node Name
 
    position = matrix.translationPart()
    temp_buf += write_float(-position[0]) #Position X
    temp_buf += write_float(position[1])  #Position Y
    temp_buf += write_float(position[2])  #Position Z
 
    scale = matrix.scalePart()
    temp_buf += write_float(scale[0]) #Scale X
    temp_buf += write_float(scale[1]) #Scale Y
    temp_buf += write_float(scale[2]) #Scale Z
 
    quat = matrix.toQuat()
    quat.normalize()
 
    temp_buf += write_float(quat.w)  #Rotation W
    temp_buf += write_float(-quat.x) #Rotation X
    temp_buf += write_float(quat.y)  #Rotation Y
    temp_buf += write_float(quat.z)  #Rotation Z
 
    temp_buf += write_node_bone(ibone)
    temp_buf += write_node_keys(ibone)
 
    for iibone in xrange(len(bone_stack)):
        if bone_stack[iibone][1] == bone_stack[ibone][2]:
            temp_buf += write_node_node(iibone)
 
    if len(temp_buf) > 0:
        node_buf += write_chunk("NODE",temp_buf)
        temp_buf = ""
 
    return node_buf
 
#Write NODE BONE Chunk
def write_node_bone(ibone):
    bone_buf = ""
    temp_buf = ""
 
    for ivert in xrange(len(mesh_stack)):
        for iuv in xrange(len(mesh_stack[ivert][4][0])):
            for vert_influ in mesh_stack[ivert][5]:
                if bone_stack[ibone][2].name == vert_influ[0]:
                    temp_buf += write_int(mesh_stack[ivert][0] + iuv) #Vertex ID
                    temp_buf += write_float(vert_influ[1]) #Weight
 
    bone_buf += write_chunk("BONE",temp_buf)
    temp_buf = ""
 
    return bone_buf
 
#Write NODE KEYS Chunk
def write_node_keys(ibone):
    keys_buf = ""
    temp_buf = ""
 
    temp_buf += write_int(7) #Flags
 
    for ikeys in xrange(len(keys_stack)):
        if keys_stack[ikeys][1] == bone_stack[ibone][2].name:
            temp_buf += write_int(keys_stack[ikeys][0]) #Frame
 
            position = keys_stack[ikeys][2]
            temp_buf += write_float(-position[0]) #Position X
            temp_buf += write_float(position[1])  #Position Y
            temp_buf += write_float(position[2])  #Position Z
 
            scale = keys_stack[ikeys][3]
            temp_buf += write_float(scale[0]) #Scale X
            temp_buf += write_float(scale[1]) #Scale Y
            temp_buf += write_float(scale[2]) #Scale Z
 
            quat = keys_stack[ikeys][4]
            quat.normalize()
 
            temp_buf += write_float(quat.w)  #Rotation W
            temp_buf += write_float(-quat.x) #Rotation X
            temp_buf += write_float(quat.y)  #Rotation Y
            temp_buf += write_float(quat.z)  #Rotation Z
 
    keys_buf += write_chunk("KEYS",temp_buf)
    temp_buf = ""
 
    return keys_buf
 
#Handle Event
def handle_button(event):
    global EVENT_ALL,EVENT_SEL
    global EVENT_NOR,EVENT_COL,EVENT_CAM,EVENT_LIG
    global EVENT_EXP,EVENT_QUI
 
    if event == EVENT_ALL:
        flag_stack[0] = 1-flag_stack[0] #All Objects
        flag_stack[1] = 1-flag_stack[1] #Selected Only
        Blender.Draw.Redraw(1)
 
    if event == EVENT_SEL:
        flag_stack[1] = 1-flag_stack[1] #Selected Only
        flag_stack[0] = 1-flag_stack[0] #All Objects
        Blender.Draw.Redraw(1)
 
    if event == EVENT_NOR:
        flag_stack[2] = 1-flag_stack[2] #Vertex Normals
        Blender.Draw.Redraw(1)
 
    if event == EVENT_COL:
        flag_stack[3] = 1-flag_stack[3] #Vertex Colors
        Blender.Draw.Redraw(1)
 
    if event == EVENT_CAM:
        flag_stack[4] = 1-flag_stack[4] #Cameras
        Blender.Draw.Redraw(1)
 
    if event == EVENT_LIG:
        flag_stack[5] = 1-flag_stack[5] #Lights
        Blender.Draw.Redraw(1)
 
    if event == EVENT_EXP:
        tmp_filename = Blender.sys.makename(ext = ".b3d")
        Blender.Window.FileSelector(savefile_callback,"Export B3D",tmp_filename)
 
    if event == EVENT_QUI:
        Blender.Draw.Exit()
 
#Handle GUI
def handle_event(event,value):
    if event == Blender.Draw.ESCKEY:
        Blender.Draw.Exit()
        return
 
#Draw GUI
def draw_gui():
    global EVENT_ALL,EVENT_SEL
    global EVENT_NOR,EVENT_COL,EVENT_CAM,EVENT_LIG
    global EVENT_EXP,EVENT_QUI
    button_width = 222
    button_height = 20
 
    def draw_rect(x,y,width,height):
        glBegin(GL_LINE_LOOP)
        glVertex2i(x,y)
        glVertex2i(x+width,y)
        glVertex2i(x+width,y-height)
        glVertex2i(x,y-height)
        glEnd()
 
    Blender.BGL.glClearColor(34.0/255.0,85.0/255.0,136.0/255.0,1.0)
    Blender.BGL.glClear(Blender.BGL.GL_COLOR_BUFFER_BIT)   
 
    glColor3f(170.0/255.0,255.0/255.0,255.0/255.0)
    draw_rect(20,330,262,310)
    draw_rect(22,328,258,306)
 
    glColor3f(255.0/255.0,238.0/255.0,0.0/255.0)
    glRasterPos2i(70,300)
    Draw.Text("Blitz3D Exporter 2.04",'large')
 
    Blender.Draw.Toggle("All Objects",EVENT_ALL,40,13*button_height,button_width,button_height,flag_stack[0],"Export All Scene Objects")
    Blender.Draw.Toggle("Selected Only",EVENT_SEL,40,12*button_height,button_width,button_height,flag_stack[1],"Export Only Selected Objects")
 
    Blender.Draw.Toggle("Normals",EVENT_NOR,40,10*button_height,button_width,button_height,flag_stack[2],"Export Vertex Normals")
    Blender.Draw.Toggle("Vertex Colors",EVENT_COL,40,9*button_height,button_width,button_height,flag_stack[3],"Export Vertex Colors")
    Blender.Draw.Toggle("Cameras",EVENT_CAM,40,8*button_height,button_width,button_height,flag_stack[4],"Export Cameras")
    Blender.Draw.Toggle("Lights",EVENT_LIG,40,7*button_height,button_width,button_height,flag_stack[5],"Export Lights")
 
    Blender.Draw.Button("Export",EVENT_EXP,40,5*button_height,button_width,button_height,"Export to B3D")
    Blender.Draw.Button("Quit",EVENT_QUI,40,4*button_height,button_width,button_height,"Quit this script")
 
    glRasterPos2i(36,55)
    Draw.Text("Copyright (C) 2008 by Diego 'GaNDaLDF' Parisi",'small')
    glRasterPos2i(105,37)
    Draw.Text("www.gandaldf.com",'small')
 
Blender.Draw.Register(draw_gui,handle_event,handle_button)
 
#Callback Functions
def savefile_callback(filename):
    if filename == "":
        return
 
    if not filename.endswith(".b3d"):
   filename += ".b3d"
 
    if Blender.sys.exists(filename):
   result = Draw.PupMenu("File Already Exists, Overwrite?%t|Yes%x1|No%x0")
   if result != 1:
       return
 
    start = Blender.sys.time()
    write_b3d_file(filename)
    end = Blender.sys.time()
    print "%s"%Blender.sys.basename(filename)+" successfully exported in %.4f seconds"%(end-start)
    Blender.Draw.Exit()
    return
 
#Export B3D
def export_b3d():
    flag_stack.append(1) #All Objects
    flag_stack.append(0) #Selected Only
    flag_stack.append(0) #Vertex Normals
    flag_stack.append(0) #Vertex Colors
    flag_stack.append(0) #Cameras
    flag_stack.append(0) #Lights
 
    draw_gui()
 
#Main
def main():
 
    export_b3d()
 
if __name__ == "__main__":
    main()
Image
User avatar
Jare
Devoted Member
Posts: 877
Joined: Mon Aug 27, 2007 10:18 pm
Location: Pori
Contact:

Re: Offtopic (I/2010)

Post by Jare »

Latexi95 wrote:Veikkauksia mistä voisi johtua, että sivujeni kaikki javascriptit lakkaavat toimimasta,
vaikka en niihin kaikkiin ole koskenutkaan?
Selaimen virhekonsolista löytynee tietoa. Operassa virhekonsoli löytyy valikosta Tools -> Advanced -> Error Console. Firefoxissa Tools -> Error Console.
User avatar
Kille
Active Member
Posts: 249
Joined: Wed Aug 26, 2009 3:50 pm
Location: Juankoski

Re: Offtopic (I/2010)

Post by Kille »

kiitos koodista, mutta mitä sille pitäisi tehdä?
KilledWhale
Tech Developer
Tech Developer
Posts: 545
Joined: Sun Aug 26, 2007 2:43 pm
Location: Liminka

Re: Offtopic (I/2010)

Post by KilledWhale »

Täällä sitä istutaan Tanpereen yliopistolla nauttimassa MAOLin tarjoamasta ilmaisesta algoritmiikkaopetuksesta ja kilpailemassa oikeudesta päästä edustamaan Suomea BOI 2010-kilpailuun. Yllättäen täällä tuli vastaan kaksi muutakin foorumilaista ja toivottavasti ensi vuonna foorumeilta useampikin lukiolainen lähtee yrittämään Datatähti-kilpailuun.

Itse osallistuin syksyllä ensimmäistä kertaa ja ensi vuonna aion varmasti osallistua uudelleen. Alkukilpailun taso ei ollut erityisen kova ja huonoimmat jatkoonpääsijät saivat 66/100 pistettä, mutta itse sijoituin kuudenneksi pisteillä 94/100. Loppukilpailussa tehtävät olivat huomattavasti vaikeampia ja olinkin jaetulla kymmenennellä sijalla, mutta yliopistopaikka tuli silti varmistettua etukäteen.

Ensi vuonna kaikki vähänkin C/C++/Pascalia osaavat ja algoritmiikasta kiinnostuneet lukiolaiset täältä saavat kyllä lähteä mukaan!
Odotellesse voitte ratkoa tehtäviä esim seuraavasta:
http://ace.delos.com/usacogate

Ja jos joku ei tunnu aukeavan voi apua koittaa kysellä vaikka minulta.
CoolBasic henkilökuntaa
Kehittäjä

cbFUN Kello
cbSDL
Whale.dy.fi

<@cce> miltäs tuntuu olla suomen paras
caje
Tech Developer
Tech Developer
Posts: 16
Joined: Wed Jul 16, 2008 2:04 pm
Location: Stadi

Re: Offtopic (I/2010)

Post by caje »

KilledWhale wrote:Loppukilpailussa tehtävät olivat huomattavasti vaikeampia ja olinkin jaetulla kymmenennellä sijalla, mutta yliopistopaikka tuli silti varmistettua etukäteen.
Äärimmäisen hieno suoritus. Onneksi olkoon.
CoolBasic henkilökuntaa
Tech-kehittäjä
Cool Developer
ezbe
Tech Developer
Tech Developer
Posts: 93
Joined: Fri May 08, 2009 6:53 pm

Re: Offtopic (I/2010)

Post by ezbe »

KilledWhale wrote: Loppukilpailussa tehtävät olivat huomattavasti vaikeampia ja olinkin jaetulla kymmenennellä sijalla, mutta yliopistopaikka tuli silti varmistettua etukäteen.
Onneksi olkoon KilledWhalelle!

Itsellenikin tuli juuri hyviä uutisia, viimeinen tenttini on hyväksytty, ja voin pyytää tutkintotodistusta. Kyseessä siis Bullshi... Bachelor of Science in Software Engineering, ts. ohjelmistotekniikan insinööri 8-) Ja koodaustaito toki nousi heti potenssiin kymmenen... no ei nyt ihan, käytännössähän tuo ei vaikuta juuri mihinkään, koska kaikki varsinaiset alaan liittyvät kurssit on suoritettu jo aikoja sitten, valmistuminen roikkui puuttuvasta yritystalouden kurssista. :D
temu92
Web Developer
Web Developer
Posts: 1226
Joined: Mon Aug 27, 2007 9:56 pm
Location: Gamindustri
Contact:

Re: Offtopic (I/2010)

Post by temu92 »

KilledWhale wrote:Ensi vuonna kaikki vähänkin C/C++/Pascalia osaavat ja algoritmiikasta kiinnostuneet lukiolaiset täältä saavat kyllä lähteä mukaan!.
No vähän osaan, mutta kun se on liian vähän :/ PHP:lla osaisin tehdä paljon paremmin mitä tuolta datatähdestä yleensä löytyy :p
phons
Guru
Posts: 1056
Joined: Wed May 14, 2008 10:11 am

Re: Offtopic (I/2010)

Post by phons »

Kille wrote:kiitos koodista, mutta mitä sille pitäisi tehdä?
Luot Blenderin scripts kansioon uuden filen nimeltä: b3d exporter.py, ja laitat tuon koodin sinne, sitten Blender osaa automaattisesti hakea sen ja käyttää sitä.
Image
Locked