iddevnet/quake4/Notes_about_Origins

280 lines
16 KiB
Text
Raw Normal View History

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<meta name="robots" content="index,nofollow">
<title>Notes about Origins - Quake 4 SDK Documentation</title>
<script type="text/javascript" src="/wiki/common/js/common.js"></script>
<script type="text/javascript">
<!--// common functions
// We keep here the state of the search box
searchIsDisabled = false;
function searchChange(e) {
// Update search buttons status according to search box content.
// Ignore empty or whitespace search term.
var value = e.value.replace(/\s+/, '');
if (value == '' || searchIsDisabled) {
searchSetDisabled(true);
} else {
searchSetDisabled(false);
}
}
function searchSetDisabled(flag) {
// Enable or disable search
document.getElementById('fullsearch').disabled = flag;
document.getElementById('titlesearch').disabled = flag;
}
function searchFocus(e) {
// Update search input content on focus
if (e.value == 'Search') {
e.value = '';
e.className = '';
searchIsDisabled = false;
}
}
function searchBlur(e) {
// Update search input content on blur
if (e.value == '') {
e.value = 'Search';
e.className = 'disabled';
searchIsDisabled = true;
}
}
function actionsMenuInit(title) {
// Initialize action menu
for (i = 0; i < document.forms.length; i++) {
var form = document.forms[i];
if (form.className == 'actionsmenu') {
// Check if this form needs update
var div = form.getElementsByTagName('div')[0];
var label = div.getElementsByTagName('label')[0];
if (label) {
// This is the first time: remove label and do buton.
div.removeChild(label);
var dobutton = div.getElementsByTagName('input')[0];
div.removeChild(dobutton);
// and add menu title
var select = div.getElementsByTagName('select')[0];
var item = document.createElement('option');
item.appendChild(document.createTextNode(title));
item.value = 'show';
select.insertBefore(item, select.options[0]);
select.selectedIndex = 0;
}
}
}
}
//-->
</script>
<link rel="stylesheet" type="text/css" charset="utf-8" media="all" href="/wiki/modern/css/common.css">
<link rel="stylesheet" type="text/css" charset="utf-8" media="screen" href="/wiki/modern/css/screen.css">
<link rel="stylesheet" type="text/css" charset="utf-8" media="print" href="/wiki/modern/css/print.css">
<link rel="stylesheet" type="text/css" charset="utf-8" media="projection" href="/wiki/modern/css/projection.css">
<!-- css only for MSIE browsers -->
<!--[if IE]>
<link rel="stylesheet" type="text/css" charset="utf-8" media="all" href="/wiki/modern/css/msie.css">
<![endif]-->
<link rel="Start" href="/quake4/Quake4SDK">
<link rel="Alternate" title="Wiki Markup" href="/quake4/Notes_about_Origins?action=raw">
<link rel="Alternate" media="print" title="Print View" href="/quake4/Notes_about_Origins?action=print">
<link rel="Appendix" title="fx_origins.jpg" href="/quake4/Notes_about_Origins?action=AttachFile&amp;do=view&amp;target=fx_origins.jpg">
<link rel="Search" href="/quake4/FindPage">
<link rel="Index" href="/quake4/TitleIndex">
<link rel="Glossary" href="/quake4/WordIndex">
<link rel="Help" href="/quake4/HelpOnFormatting">
</head>
<body lang="en" dir="ltr">
<div id="header">
<div id="logo"><a href="/quake4/Quake4SDK"><img src="/wiki/common/moinmoin.png" alt="MoinMoin Logo"></a></div>
<form id="searchform" method="get" action="">
<div>
<input type="hidden" name="action" value="fullsearch">
<input type="hidden" name="context" value="180">
<label for="searchinput">Search:</label>
<input id="searchinput" type="text" name="value" value="" size="20"
onfocus="searchFocus(this)" onblur="searchBlur(this)"
onkeyup="searchChange(this)" onchange="searchChange(this)" alt="Search">
<input id="titlesearch" name="titlesearch" type="submit"
value="Titles" alt="Search Titles">
<input id="fullsearch" name="fullsearch" type="submit"
value="Text" alt="Search Full Text">
</div>
</form>
<script type="text/javascript">
<!--// Initialize search form
var f = document.getElementById('searchform');
f.getElementsByTagName('label')[0].style.display = 'none';
var e = document.getElementById('searchinput');
searchChange(e);
searchBlur(e);
//-->
</script>
<ul id="username"><li><a href="/quake4/Notes_about_Origins?action=login" id="login">Login</a></li></ul>
<div id="locationline">
<ul id="pagelocation">
<li><a class="backlink" title="Click to do a full-text search for this title" href="/quake4/Notes_about_Origins?action=fullsearch&amp;value=linkto%3A%22Notes+about+Origins%22&amp;context=180">Notes about Origins</a></li>
</ul>
</div>
<ul id="navibar">
<li class="wikilink"><a href="/quake4/GettingStarted">GettingStarted</a></li><li class="wikilink"><a href="/quake4/ScriptFile">ScriptFile</a></li><li class="wikilink"><a href="/quake4/MakeAMod">MakeAMod</a></li><li class="wikilink"><a href="/quake4/LevelEditor">LevelEditor</a></li><li class="wikilink"><a href="/quake4/FXEditor">FXEditor</a></li><li class="wikilink"><a href="/quake4/GUIEditor">GUIEditor</a></li><li class="wikilink"><a href="/quake4/Sounds">Sounds</a></li><li class="wikilink"><a href="/quake4/Animations">Animations</a></li><li class="wikilink"><a href="/quake4/ArtReference">ArtReference</a></li><li class="wikilink"><a href="/quake4/DownloadableContent">DownloadableContent</a></li><li class="wikilink"><a href="/quake4/RecentChanges">RecentChanges</a></li><li class="wikilink"><a href="/quake4/FindPage">FindPage</a></li><li class="wikilink"><a href="/quake4/HelpContents">HelpContents</a></li><li class="current"><a href="/quake4/Notes_about_Origins">Notes about Origins</a></li>
</ul>
<div id="pageline"><hr style="display:none;"></div>
<ul class="editbar"><li><span class="disabled">Immutable Page</span></li><li><a href="/quake4/Notes_about_Origins?action=info">Info</a></li><li><a href="/quake4/Notes_about_Origins?action=AttachFile">Attachments</a></li><li>
<form class="actionsmenu" method="get" action="">
<div>
<label>More Actions:</label>
<select name="action"
onchange="if ((this.selectedIndex != 0) &&
(this.options[this.selectedIndex].disabled == false)) {
this.form.submit();
}
this.selectedIndex = 0;">
<option value="raw">Raw Text</option>
<option value="print">Print View</option>
<option value="RenderAsDocbook">Render as Docbook</option>
<option value="refresh">Delete Cache</option>
<option value="show" disabled class="disabled">------------</option>
<option value="SpellCheck">Check Spelling</option>
<option value="LikePages">Like Pages</option>
<option value="LocalSiteMap">Local Site Map</option>
<option value="show" disabled class="disabled">------------</option>
<option value="RenamePage" disabled class="disabled">Rename Page</option>
<option value="DeletePage" disabled class="disabled">Delete Page</option>
<option value="show" disabled class="disabled">------------</option>
<option value="MyPages">My Pages</option>
<option value="SubscribeUser">Subscribe User</option>
<option value="show" disabled class="disabled">------------</option>
<option value="Despam">Remove Spam</option>
<option value="PackagePages">Package Pages</option>
</select>
<input type="submit" value="Do">
</div>
<script type="text/javascript">
<!--// Init menu
actionsMenuInit('More Actions:');
//-->
</script>
</form>
</li></ul>
</div>
<div id="page" lang="en" dir="ltr">
<div dir="ltr" id="content" lang="en"><span class="anchor" id="top"></span>
<span class="anchor" id="line-1"></span><p class="line862">The <a href="/quake4/FXEditor_Tab_-_Origin">Origin</a> tab can control more than the bounds in which <a href="/quake4/FXEditor_Tab_-_Sprite">sprites</a> and <a href="/quake4/FXEditor_Tab_-_Sprite">lines</a> spawn. <span class="anchor" id="line-2"></span><span class="anchor" id="line-3"></span><pre>Example: An effect was needed where sprites moved outward from a center point. You could set values under Motion for Left and Up, but this would create a square shape when viewed from the top.
<span class="anchor" id="line-4"></span></pre><span class="anchor" id="line-5"></span><span class="anchor" id="line-6"></span><p class="line862">To get around this, apply <a href="/quake4/FXEditor_Tab_-_Motion">motion</a> only in the forward axis and use <a href="/quake4/FXEditor_Tab_-_Origin">Origin</a> to adjust where the forward axis is. This can be accomplished by <a href="/quake4/FXEditor_Tab_-_Origin#normalfromcenterorsurface">Generating the normal from effect origin</a> of an effect segment and selecting <a href="/quake4/FXEditor_Tab_-_Origin#spawnonsurface">Spawn on Surface</a> of a shape such as a <a href="/quake4/FXEditor_Tab_-_Origin#cylinder">cylinder</a> or <a href="/quake4/FXEditor_Tab_-_Origin#sphere">sphere</a>. Depending on the size of the origin min/max bounds, the sprite particles will emit from what appears to be a bubble or from a point. If the origin bounds are very small, it will appear as though the sprites are emitting from a single point. <span class="anchor" id="line-7"></span><span class="anchor" id="line-8"></span><p class="line862">This same technique can be used with <a href="/quake4/FXEditor_Tab_-_Sprite">lines</a>, and will give them a direction to point in. A good example is <strong>effects/weapons/machinegun/impact_default.fx</strong>. The <strong>side_streaks</strong> segment uses a <a href="/quake4/FXEditor_Tab_-_Origin#cylinder">cylinder</a> origin with <a href="/quake4/FXEditor_Tab_-_Origin#spawnonsurface">Spawn on Surface</a> checked. Giving the <a href="/quake4/FXEditor_Tab_-_Origin">Origin</a> only a min value for in the forward axis ensures a consistent angle forward, while a range of left and up values ensure a random selection around the circumference of the <a href="/quake4/FXEditor_Tab_-_Origin#cylinder">cylinder</a>. As the forward value grows larger in relation to the left and up values, the angle of the line segments grows steeper. As the forward value grows smaller in relation to the left and up values, the angle of the line segments grows shallower. (Note on the machinegun effect: Since the forward origin value is –0.2, Invert Normals is checked so the lines point the proper direction.) <span class="anchor" id="line-9"></span><span class="anchor" id="line-10"></span><p class="line874">A good way to achieve the angle you are looking for is to make sure your particle count is high temporarily so it’s easier to see what is going on. Remember that once you find your angle, you can adjust the numbers down to decimal values so that the angle is projected from a single point. <span class="anchor" id="line-11"></span><span class="anchor" id="line-12"></span><pre>Example: Forward value of 5, Left and Up min/max values of –10/10. This will generate a cylinder 5 units tall with a diameter of 10 units. If you wish this effect to emit from a point, drop the values to: Forward 0.05 and Left/Up min/max –0.1/0.1
<span class="anchor" id="line-13"></span></pre><span class="anchor" id="line-14"></span><span class="anchor" id="line-15"></span><p class="line867">
<h2 id="head-6906adeaf419d98ddaadff8634dad32f5b598a54">Sample Origin values and visual description.</h2>
<span class="anchor" id="line-16"></span><p class="line867"><hr /><p class="line874"> <span class="anchor" id="line-17"></span>
<h3 id="head-1d8433347ba29f521f41026b596d0c28cf978de4">Example A:</h3>
<span class="anchor" id="line-18"></span><div><table style="width: 25%"><tbody><tr> <td><p class="line862">Forward min</td>
<td><p class="line891"><strong>5</strong></td>
</tr>
<tr> <td><span class="anchor" id="line-19"></span><p class="line862">Left min/max</td>
<td><p class="line891"><strong>-10/10</strong></td>
</tr>
<tr> <td><span class="anchor" id="line-20"></span><p class="line862">Up min/max</td>
<td><p class="line891"><strong>-10/10</strong></td>
</tr>
</tbody></table></div><span class="anchor" id="line-21"></span><span class="anchor" id="line-22"></span><p class="line867">
<h3 id="head-def183bf27888230da265d08338568c7a7f020a5">Example B:</h3>
<span class="anchor" id="line-23"></span><div><table style="width: 25%"><tbody><tr> <td><p class="line862">Forward min</td>
<td><p class="line891"><strong>10</strong></td>
</tr>
<tr> <td><span class="anchor" id="line-24"></span><p class="line862">Left min/max</td>
<td><p class="line891"><strong>-10/10</strong></td>
</tr>
<tr> <td><span class="anchor" id="line-25"></span><p class="line862">Up min/max</td>
<td><p class="line891"><strong>-10/10</strong></td>
</tr>
</tbody></table></div><span class="anchor" id="line-26"></span><span class="anchor" id="line-27"></span><p class="line867">
<h3 id="head-4a4ef7f27b8135c47e1f22673febaa0f4822fbaa">Example C:</h3>
<span class="anchor" id="line-28"></span><div><table style="width: 25%"><tbody><tr> <td><p class="line862">Forward min</td>
<td><p class="line891"><strong>0.1</strong></td>
</tr>
<tr> <td><span class="anchor" id="line-29"></span><p class="line862">Left min/max</td>
<td><p class="line891"><strong>-0.1/0.1</strong></td>
</tr>
<tr> <td><span class="anchor" id="line-30"></span><p class="line862">Up min/max</td>
<td><p class="line891"><strong>-0.1/0.1</strong></td>
</tr>
</tbody></table></div><span class="anchor" id="line-31"></span><p class="line867"><img class="attachment" src="/quake4/Notes_about_Origins?action=AttachFile&amp;do=get&amp;target=fx_origins.jpg" title="attachment:fx_origins.jpg" /> <span class="anchor" id="line-32"></span><span class="anchor" id="bottom"></span></div><p id="pageinfo" class="info" lang="en" dir="ltr">Notes about Origins (last edited 2005-11-04 00:01:28 by <span title="MattVainio @ 67.129.250.254[67.129.250.254]"><a class="nonexistent" href="/quake4/MattVainio" title="MattVainio @ 67.129.250.254[67.129.250.254]">MattVainio</a></span>)</p>
<div id="pagebottom"></div>
</div>
<div id="footer">
<ul class="editbar"><li><span class="disabled">Immutable Page</span></li><li><a href="/quake4/Notes_about_Origins?action=info">Info</a></li><li><a href="/quake4/Notes_about_Origins?action=AttachFile">Attachments</a></li><li>
<form class="actionsmenu" method="get" action="">
<div>
<label>More Actions:</label>
<select name="action"
onchange="if ((this.selectedIndex != 0) &&
(this.options[this.selectedIndex].disabled == false)) {
this.form.submit();
}
this.selectedIndex = 0;">
<option value="raw">Raw Text</option>
<option value="print">Print View</option>
<option value="RenderAsDocbook">Render as Docbook</option>
<option value="refresh">Delete Cache</option>
<option value="show" disabled class="disabled">------------</option>
<option value="SpellCheck">Check Spelling</option>
<option value="LikePages">Like Pages</option>
<option value="LocalSiteMap">Local Site Map</option>
<option value="show" disabled class="disabled">------------</option>
<option value="RenamePage" disabled class="disabled">Rename Page</option>
<option value="DeletePage" disabled class="disabled">Delete Page</option>
<option value="show" disabled class="disabled">------------</option>
<option value="MyPages">My Pages</option>
<option value="SubscribeUser">Subscribe User</option>
<option value="show" disabled class="disabled">------------</option>
<option value="Despam">Remove Spam</option>
<option value="PackagePages">Package Pages</option>
</select>
<input type="submit" value="Do">
</div>
<script type="text/javascript">
<!--// Init menu
actionsMenuInit('More Actions:');
//-->
</script>
</form>
</li></ul>
<ul id="credits">
<li><a href="http://moinmoin.wikiwikiweb.de/">MoinMoin Powered</a></li><li><a href="http://www.python.org/">Python Powered</a></li><li><a href="http://validator.w3.org/check?uri=referer">Valid HTML 4.01</a></li>
</ul>
</div>
</body>
</html>